问题标签 [netmq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
114 浏览

message-queue - 在这种情况下推荐使用哪个 ZeroMQ 套接字?

我们正在 WebApi 和 SignalR 之上构建一个在线游戏(基于浏览器)平台。我们的首要任务之一是低延迟响应时间和可扩展性。在可扩展性方面,我们正在考虑横向扩展方法,将应用程序负载分布在多个服务器节点上。然而,这种架构并非没有额外的复杂性。

在我提出问题之前,让我先描述一下问题。考虑到我们有 2 个服务器节点用于负载平衡。我们说有 50,000 名在线玩家。50% 的玩家使用 SignalR/Websockets 连接到 Node1,另外 50% 连接到 Node2。现在,当 Node1 需要向连接到 Node2 的玩家传递消息时,问题就出现了。Node1 和播放器之间没有物理连接。

所以现在我们有两种可能的解决方案:

  1. 强制一组相似的玩家加入同一个节点。但是,对于我们的场景,这种方法带来的问题多于它解决的问题(尤其是在故障转移恢复期间)。我不会详述。
  2. 允许节点相互通信,所以当 node1 需要向连接到 node2 的客户端发送消息时,node1 将在 node2 的帮助下完成(类似于 node1 --> node2 --> 客户端)。在这种情况下,每个节点都将连接到其他每个节点。

您可能已经猜到了,我们选择了第二种解决方案。正如我已经提到的,服务器响应时间应该非常低,最多低于 50 毫秒,因此在服务器端添加额外的通信层是一个问题。服务器通信应尽可能高效。

这就是我们决定使用ZeroMQ的原因。我们对其进行了测试(REQ-REP),性能远远超过我们可接受的利润。但有一个问题。我已经多次阅读文档,但它让我感到困惑,而不是给了我想法。简而言之,我不知道在我的场景中使用哪种套接字类型。如果节点离线,我不需要排队消息,只是忽略它。

所以任何推荐/帮助都会很好。另外,如果有人能抽出时间简短地描述为什么特定的套接字/模式对我们来说是更好的方法会更好:)

0 投票
2 回答
1566 浏览

c# - NetMQ 中 RouterSocket 上的轮询器

我在客户端有一个 RequestSocket 向服务器发送请求。服务器必须能够并行处理请求,所以我使用了带有轮询器的 RouterSocket。

我不确定这是否是最好的实现,因为它使用了大量的 CPU,而没有请求处理?具体来说,RouterSocket 上的 SendReady 事件非常频繁地触发。

0 投票
1 回答
3424 浏览

zeromq - zmq在后台是如何进行端口分配的?

我一直在研究 zmq 并且已经实现了一个简化的 poc - 以模仿我的基础设施设计 - 使用它(特别是使用 NetMQ 包装器),效果很好。

我的情况是这样的:

将来我计划在一台机器上运行多个客户端,每个客户端都需要通过多个套接字与“服务器”(位于不同的机器上)进行通信。

我注意到,对于我明确声明和打开的每个套接字,zmq 在内部打开了更多套接字并由它管理。

编辑

绑定套接字在动态范围内分配了一个新端口,这很好,

但是虽然我的客户端只显式连接到 2 个端口,但 zmq 自动为他分配了大约 15 个端口。

我担心,这最终可能会导致端口短缺,这是我非常想避免的情况。

问题:

  1. zmq 是如何内部分配端口的,显式声明的套接字与 zmq 自动打开的端口之间的比率是多少?

  2. 有没有办法让我通过配置或任何其他方式以编程方式控制端口分配?

  3. 使用轮询如何影响端口使用?

肿瘤坏死因子,

0 投票
1 回答
952 浏览

.net - 在 NetMQ 中通过 ROUTER-ROUTER 重新连接后未传递消息

我在与NetMQ进行 ROUTER-ROUTER 通信时遇到问题。

两个应用程序,客户端和服务器。两者都使用 ROUTER 套接字。客户端路由器套接字没有明确设置它的身份,只有服务器。

第一次建立连接后,消息从客户端(ROUTER)路由到服务器(ROUTER)。但是一旦客户端再次调用 Disconnect() 然后 Connect() (在很短的时间后,即 10 毫秒),服务器就不再接收消息了。

有趣的是,如果使用ZeroMq C# lib,则重新连接可以正常工作。

这是一个已知问题还是我在这里做错了什么?

重现问题的最少代码:

0 投票
1 回答
224 浏览

c - 如何在 NetMQ 中使用 PollTimeout?

我找不到任何文档告诉我如何在 NetMQ 中使用 PollTimeout。它可以用来检测发送或接收超时吗?万一可以,怎么办?

0 投票
1 回答
183 浏览

c# - ZeroMq/NetMQ 无法从 ReceivingSocketExtensions 中找到扩展 ReceiveFrameBytes

在 NetMQ 中发布/订阅时,我如何接收字节。

我正在尝试使用来自 ReceivingSocketExtensions 的扩展 byte[] ReceiveFrameBytes(),但我只是看不到它的智能感知。

我正在使用 NetMQ,它是扩展的容器命名空间。我正在使用 Nuget NetMq 包(不确定它是否相关 - 我假设它与 github 版本相同)

http://netmq.readthedocs.org/en/latest/receiving-sending/

使用 NUGET 包解决它

0 投票
1 回答
748 浏览

zeromq - 对在 NetMQ 中使用 SendHighWatermark 感到困惑

我正在使用 NetMQ 对我的原型进行测试,特别是我正在学习 HighWatermark 选项的影响。

我已经了解并测试了以下案例:

  • 带有 ROUTER 套接字的服务器尚未启动
  • 同时带有 DEALER 套接字的客户端正在发送 20 条消息(SendHighWatermark 为 10)

在这种情况下,我看到客户端只能发送 10 条消息,然后它在发送时被阻止。

然后我做了另一个处理速度慢的测试 - ROUTER 在收到每条消息后都会休眠。在这种情况下,我希望 DEALER 快速发送 10 条消息,并延迟发送另外 10 条消息。但 DEALER 会毫无延迟地发送所有消息。

路由器的代码:

经销商代码:

为什么在我的情况下,当处理速度很慢时,经销商可以毫不拖延地发送?

0 投票
1 回答
140 浏览

windows-phone-8.1 - Windows Phone 8.1 上的 ZeroMQ?

我一直在为 Windows Phone 8.1 开发一个应用程序,我想使用 ZeroMQ 与服务器进行通信。我以前使用过 ZMQ,经过一些尝试后它一直有效,但我无法让它与 WP8.1 一起使用。我已经尝试使用 NetMQ,但是在尝试通过 NuGet 安装它时出现错误“包不包含与该框架兼容的任何程序集引用或内容文件”,与 clrzmq4 和 Castle.ZMQ 有同样的问题。有可能让 ZeroMQ 在 WP8.1 上运行吗?我很感谢你的帮助。

0 投票
2 回答
2541 浏览

zeromq - PUB/SUB 我可以在 .bind() 之前 .connect() 吗?

我正在使用PUB/SUB设计,我的问题是:

.bind()可以在另一个套接字对它进行 -ed 之后访问一个端口.connect(),还是应该.bind()在另一个套接字尝试访问.connect()同一个地址之前访问它?

换句话说:

.bind()和的顺序.connect()重要吗?

(我认为这个问题不是特定于PUB/SUB但与任何设计相关)。

0 投票
2 回答
756 浏览

c# - NetMQ 订阅者使用已发布的消息阻塞

我有一个消息发布服务器类,它在构造时创建一个 PUB 套接字,代码如下:

messagePublishingServer.Publish(message)使用执行发送消息:

以下 xBehave 测试...

...块在subSocket.ReceiveFrameString()我发现意外的第一个。订阅者套接字不应该在调用接收之前将发布的消息排队吗?