- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究分布式应用程序。网络基于ZMQ(jeromq),这是我的架构:
N Clients (Dealer socket) <---> (Router) Proxy (Dealer) <---> 1 (Dealer) Reciving Worker
<---> N (Dealer) Processing Workers
当客户端发送一条消息时,它被接收工作线程接收,放入队列中,处理工作线程将其拾取并进行一些处理并将其发回,客户端收到响应后发送另一个请求,即接收工作人员未收到请求,但该请求是由客户端发送的。基本上只有第一“轮”有效。我在这里缺少什么?!
最佳答案
您缺少的是经销商套接字以循环方式向任何连接的客户端发送消息。结果是您的架构无法按您预期的方式工作。
首先,我将为您的预期架构编写一个更准确的图表(目前,我忽略套接字类型):
Client <-----> Broker ------> Receiver
^ |
| |
\ v
---------- Processor
当您发送第一条消息时,它会被发送到接收方 - 因为它是队列中第一个连接的套接字。当您发送第二消息时,代理上的DEALER
套接字将以循环方式发送到队列中的下一个套接字,这是第一个处理器。基本上,问题是您的代理无法区分您的“接收器”套接字和“处理器”套接字,它将它们视为同一事物。
有几种方法可以解决这个问题。首先,您可能并不真正需要“接收器”套接字作为中间人,您可能能够在代理和处理工作人员之间直接来回通信。我建议首先这样做,因为这通常是这些类型的架构的工作方式。
您还可以向代理添加另一个套接字,让一个套接字发送到接收器,另一个套接字从处理器接收。
或者,您可以将代理上的 DEALER
套接字替换为另一个 ROUTER
套接字,这将允许您每次都直接寻址接收者套接字。
跟进,解决评论中的问题:
每个工作人员都有不同的职责,这是用 ROUTER
套接字替换代理上的 DEALER
套接字的充分理由。
我的现成建议是围绕 the Majordomo Protocol 重新构建架构(更高版本可以找到 here ,并在 ZMQ 指南 here, with Java code samples 中讨论)。它完全符合您的要求,而且做得很好。
但是,在更简单的层面上,您将执行以下操作:
ROUTER
套接字 - 这两个套接字都是 bind()
-ed。connect()
你的工作人员就是你的经纪人。所有这些都是 Majordomo 协议(protocol)所实现的,再加上心跳等其他必要元素,构成了一个完全充实的 ZMQ 应用程序。这就是为什么我建议您直接使用该协议(protocol)(如果它满足您想要实现的需求),而不是尝试构建自己的协议(protocol)。
关于java - 路由器/经销商代理不传送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938886/
Pygame 我想知道是否有人知道如何在触摸或越过某些东西时交换 map 。 这是我的代码: import pygame, sys from pygame.locals import * pygame
我正在尝试使用以下代码将用户传送到他们自己的领域: @EventHandler public static void onPortalTravel(PlayerPortalEvent event) t
我想要对不同选项的简要介绍。 最佳答案 来自 Wikipedia Embedded in an SWF file using the Flash authoring tool (supported i
我正在尝试创建一个简单的程序来刺激二进制系统中恒星的旋转,但是当我运行程序时,其中一个“恒星”出现故障,实际上是围绕给定路径传送到不同位置。我怎样才能解决这个问题?这是代码: import pygam
我不会java(一般用c写) 我怎样才能有效地进行某种位 block 传送方式java中的像素数组内容到窗口上? 我需要(在循环中)将像素[][]传输到窗口上 我可以使用类似的东西 pixels[]
我遇到了无法通过 TestFlight 安装我的应用程序的 Ad Hoc 版本的问题。应用程序下载,但在安装步骤中显示类似“无法安装 YourApp”的内容,控制台上显示以下消息: Sep 17 16
如果我使用 Eazfuscator 混淆 vb.net 程序集并启用符号名称加密(以便我可以使用 Eazfuscator 堆栈跟踪解码器),如果我发送 PDB 文件,这是否有效地撤消?我想发送 PDB
我使用 Delphi 6 Pro 和 DSPACK DirectShow 组件库来创建一个 DirectShow 过滤器,该过滤器从自定义音频源提供 Wav 格式的数据。需要明确的是,我将原始 PCM
我正在尝试发布一个执行一些 RMI 调用的 Java 应用程序。 我需要将其作为 JAR 文件发送(这是一个要求,没有办法解决)。 现在,为了允许某些事情(例如套接字和 RMI 连接),我需要一个 S
在 Vue 3 中,可以使用 Teleport body 的一个组件像这样标记: Open full screen modal! (With teleport!)
由于 Netty Channel 使用单个线程进行入站和出站处理,我很想知道在使用多路复用协议(protocol)(例如 SPDY)时传送入站数据的推荐做法。想到的几个选项: 1) 使用 channe
我基本上想这样做: $_ = "some content that need to be escaped &>|\"$\'`\s\\"; qx{echo $_ | foo} 这里有两个问题。先是$_的
我想使用 Kurento 作为媒体服务器,它将 WebRTC 作为输入并提供 RTSP 流作为 url:rtsp://kurento/streamName 这可能吗? 我看到了https://gith
我的理解是,在 Azure AMS V2 上,您可以进行混合 key 分发,您可以从另一台服务器(例如 S3)流式传输加密的媒体内容,并仅使用 Azure 作为 key 服务器。 This is my
我目前正在尝试通过用于控制视频访问的 PHP 脚本传送 MP4 视频以用于 HTML5 视频(使用 video-js)。经过一些研究,在 stackoverflow article found her
我使用以下命令将 sed 的输出重定向到 tmp 文件: grep --include=*.txt -A 3 -rnw abx/ -F -e 'simple' | sed -n 's#.*/\([^/
我有一个 PHP 文件,它的唯一工作是检查用户是否登录 + 是否设置了 session 变量,然后通过 nginx X-Sendfile 传送文件。它在任何桌面浏览器和以前的任何移动浏览器上都能完美运
我在 2014 年 1 月 24 日悄悄地向 iOS 应用商店交付了一个应用。这是一款仅限 iO7/iPhone 的应用程序,所有内容均已正确交付。截至昨天,我的应用程序已获批准,目前可以在 App
我是一名优秀的程序员,十分优秀!