hyp*_*ean 10 erlang tcp gen-event
我想要解决的问题:有一个Erlang TCP服务器侦听特定端口(代码应该驻留在某种面向外部的接口/ API),每个传入连接应该由a处理gen_server
(甚至gen_tcp:accept
应该编码)在里面gen_server
),但我实际上并不想最初产生预定数量的接受传入连接的进程.这有可能吗?
Ada*_*erg 10
您应该有一个gen_server
执行以下过程的静态进程(实现为自定义进程或自定义进程):
gen_tcp:accept/1
gen_server
进程)gen_tcp:controlling_process/2
使用新返回的套接字和该pid 调用注意:您必须按此顺序执行此操作,否则新进程可能会在所有权移交之前使用套接字.如果不这样做,旧进程可能会在新进程已经接管时获得与套接字相关的消息,从而导致数据包丢失或处理不当.
监听过程应该只有一个责任,即产生新连接的工人.此过程将在调用时阻止gen_tcp:accept/1
,这很好,因为已启动的工作程序将同时处理正在进行的连接.阻止接受可确保启动新连接时的最快响应时间.如果进程需要在中间执行其他操作,则gen_tcp:accept/2
可以与超时之间交错的其他操作一起使用.
您可以gen_tcp:accept/1
在单个侦听套接字上等待多个进程,从而进一步提高并发性并最大限度地减少接受延迟.
另一个优化是预先启动一些套接字工作程序,以在接受新套接字后进一步减少延迟.