erlang第七天总结

1.异步accept
prim_inet:async_accept(LSock, -1)  %请求异步accpet
{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

   







猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/80545339