1.异步accept
prim_inet:async_accept(LSock, -1) %请求异步accpet
{inet_async, LSock, Ref, {ok, Sock}} %有连接来之后会有消息返回你刚刚调用上面函数的进程
inet_db:register_socket(Sock, inet_tcp) %上面的消息到了之后要初始化下这个socket 后面就可以正常使用了
{inet_async, LSock, Ref, {ok, Sock}} %有连接来之后会有消息返回你刚刚调用上面函数的进程
inet_db:register_socket(Sock, inet_tcp) %上面的消息到了之后要初始化下这个socket 后面就可以正常使用了
详细用法如下:
{ok, Listen} = gen_tcp:listen(1234, [binary, {packet, 0}, {reuseaddr, true}, {active, false}]), {ok, _} = prim_inet:async_accept(Listen, -1),
handle_info({inet_async, ListenSocket, _Ref, {ok, Socket}}, State) -> true = inet_db:register_socket(Socket, inet_tcp), {ok, _} = prim_inet:async_accept(ListenSocket, -1), {noreply, State}.
2.监控树的子规范里面的[]表示参数为空,而gen_server:start_link里面的[]表示参数为[]。
3.当把元祖作为参数传进函数时,可以把元祖当作记录使用,前提是元祖的第一个元素必须等于记录的名字,且元祖的元素个数等于记录里面的字段个数+1
4.lists:concat/1,把列表里面的元素合成一个文本字符的新列表,例如lists:concat([123,[4,5,6]]),会先把123转换为"123","123"等价于[49,50,51],所以结果是[49,50,51,1,2,3]
5.#state.status输出的是元素在元祖中的位置(第几位),X#state.status输出的是这个元素的值
6.ets表中{keypos,Pos},Pos表示使用Tuple的第几个元素作为键,一般当Tuple为记录时使用
7.<<Size:4, Data:Size/binary>>, binary是指Data的类型属于binary, Size是指Data的大小是Size
8.当Data的二进制位数大于Size时,会将Size位数的那部分去掉,然后从0开始算起,结果Size是不变,
如<<8:3/integer>>,结果 <<0:3>>
9. <<BinData, RestBin/binary>> = <<0,0,0,8>>.
<<BinData1:1/binary, RestBin1/binary>> = <<0,0,0,8>>.
扫描二维码关注公众号,回复:
1723901 查看本文章
<<BinData2:8/integer, RestBin2/binary>> = <<0,0,0,8>>.
10.二进制模式匹配除了最后一个外,其他的必须写Size