Erlang 我是否需要为少数几个ZeroMQ客户端启动多个服务器端工作程序?
我正在使用erlang中的Chumak,打开一个Erlang 我是否需要为少数几个ZeroMQ客户端启动多个服务器端工作程序?,erlang,zeromq,chumak,Erlang,Zeromq,Chumak,我正在使用erlang中的Chumak,打开一个路由器套接字 我有几个(大约4个)客户端使用Python zmq库向该服务器发送REQ请求 大多数情况下工作正常,但有时客户机会出现断开连接问题(自动重新连接在客户机代码中,并且可以正常工作)。我发现,当一个客户端连接中发生错误时,它似乎也会转移到其他客户端,我得到了很多 **{noproc,{gen\u server,call,[,incomming\u queue\u out]}, 在服务器上 在服务器端,我只是打开一个chumak套接字并循环
路由器
套接字
我有几个(大约4个)客户端使用Python zmq库向该服务器发送REQ
请求
大多数情况下工作正常,但有时客户机会出现断开连接问题(自动重新连接在客户机代码中,并且可以正常工作)。我发现,当一个客户端连接中发生错误时,它似乎也会转移到其他客户端,我得到了很多**{noproc,{gen\u server,call,[,incomming\u queue\u out]},
在服务器上 在服务器端,我只是打开一个chumak套接字并循环:
{ok, Sock} = chumak:socket( router ),
{ok, _} = chumak:bind( Sock, tcp, "0.0.0.0", ?PORT ),
spawn_link( fun() -> loop( Sock ) end ),
...
loop( CmdSock ) ->
{ok, [Identity, <<>>, Data]} = chumak:recv_multipart( Sock ),
...
{ok,Sock}=chumak:socket(路由器),
{ok,}=chumak:bind(Sock,tcp,“0.0.0.0”,?端口),
生成链接(fun()->循环(Sock)结束),
...
循环(CmdSock)->
{ok,[Identity,Data]}=chumak:recv_multipart(Sock),
...
ZeroMQ文档似乎暗示一个监听套接字就足够了,除非我有很多客户端。我是否误解了它们?否,没有必要增加
套接字
实例的数量
对于一个典型的用户来说,抽象非常有助于减少理解所有细节的需要。每当这些用户不得不进行性能调优或调试时,这种轻松的生活就停止了
让我们这样做:-除非某些乳齿象野兽大小的数据有效负载被移动,否则在客户端有足够多的
路由器
-AccessPoint进入套接字
-例如,数十个、数百个、数千个请求
-访问点。-然而,这样的数字将增加
路由器
-端上下文
实例的性能包络要求,以便能够处理所有可扩展的正式通信原型(预先描述的)处理,以便在适当的时间和公平的方式发生
这意味着,在我提倡使用zmq.AFFINITY
映射的所有高性能设置中,您很快就会意识到产生Context
-实例的好处,从而在最高优先级Socket
-实例上获得最大性能,而正在使用非关键资源共享上下文的公共子集
-实例的IO线程池
接下来是RAM
是的,玩具占据了记忆。
检查所有
{RCV | SND}BUF
,.MAXMSGSIZE
,{SND | RCV}.HWM
,.BACKLOG
,合并
接下来是链接管理 不要犹豫优化
、立即、{RCV | SND}BUF
、、重新连接IVL
、、重新连接IVL\u MAX
、、TCP\u KEEPALIVE
、TCP\u KEEPALIVE\u CNT
、、TCP\u KEEPALIVE\u INTVL
、、TCP\u KEEPALIVE\u IDLE>
始终在实例化时设置.LINGER
,因为辍学不再是致命的
接下来可能会出现一些防御和性能帮助工具:
.PROBE\u ROUTER
,.TCP\u ACCEPT\u FILTER
,.TOS
,。握手\u IVL
下一步?
如果游戏中没有与内存相关的问题,并且一旦提到重新连接,我的怀疑是宁愿去设置。立即+可能让路由器受益于显式探测路由器信号。我会检查这些,谢谢。当你说设置。初始化后留恋,你是指se吗是否为0?绝对是:o)有关详细信息,请仔细阅读ZeroMQ本机核心API文档。值得一试。