1. 客户端和服务器的连接
客户端通过socket连接服务器的session,session会启动一个对应角色的avatar,每个avatar就是一个进程,avatar接受分析session的消息,调用对应的模块完成数据的修改,avatar将需要反馈的结果传给session,session再传给客户端。
2. 监听器ranch
- session也是一个监听器,用ranch监听。ranch是一个用于处理套接字的网络库(使用tcp协议)。监听器通过调用:ranch.start_listener/6启动,在此之前启用ranch应用 :ok = :ranch.accept_ack/1
- :ranch.start_listener/6参数:
(@config[:listener_name],
@config[:acceptors],
@config[:transport_type],
@config[:transport_options],
TcpServer.ConnectionWorker,
[ ])
3. session对接收协议处理:
start_link/4, init/4, loop/2
- 所有的协议处理程序都必须实现ranch_protocol行为,它定义了一个回调函数

本文介绍了Elixir服务器如何接收客户端消息。首先,客户端通过socket连接到服务器的session,session启动avatar进程来处理消息。其次,服务器使用ranch监听器进行网络通信。接着,详细讨论了session对接收协议的处理,包括start_link/4、init/4和loop/2函数,以及如何避免在gen_server中因调用ranch:accept_ack/1导致的死锁。最后,概述了gen_server的工作原理,如handle_cast和handle_call回调函数。
最低0.47元/天 解锁文章
262

被折叠的 条评论
为什么被折叠?



