Erlang 我是否需要为少数几个ZeroMQ客户端启动多个服务器端工作程序?

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套接字并循环

我正在使用erlang中的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文档。值得一试。