- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望利用 ZeroMQ 来处理同时传入证明服务器的大量请求的排队问题。
我处于 HPC 环境中,因此有大量计算节点都运行与服务器进行验证的相同启动程序。该服务器代码在前端节点上运行,在成功验证客户端后,将释放 key 以便客户端解密作业数据。
当前使用标准套接字。当客户端最初向服务器发送某些内容时,会使用 sys/socket.h
中的 accept()
生成一个新套接字。这允许客户端和服务器在证明过程中相互发送多条消息(校验和等),然后在成功返回 key 之前。
ZeroMQ 的问题是附加命令不是必需的,因此不会为该特定证明创建辅助套接字。所有来自所有客户端的消息都按其进入的顺序进行处理,导致多部分证明过程无法正常工作。我花了很长时间阅读指南并通过谷歌搜索来尝试找到类似的解决方案,但到目前为止还没有任何运气。
有没有一种方法可以利用 ZeroMQ 在此应用程序中提供与标准套接字相同的行为?
最佳答案
Q : Is there a way I can utilise ZeroMQ to give the same behaviour in this application as a standard socket?
ZeroMQ 是 very smart and rather behaviour-oriented distributed-systems 的信令/消息传递平台,不是套接字。
考虑到您的意图是对 HPC 生态系统有值(value),解决方案假设/指导使用某种工具,并且必须尽可能地弯曲它,这样它就会变得接近于类似于 native 的行为,但是对于其他工具,似乎不是典型的 HPC 级方法。
HPC 代码通常经过精心设计,以便提高计算成本效率(并祝福所有那些老板、首席财务官和政府/军事资助人员,他们今天被允许不为以下目的设计 HPC 代码)最终的性能和硬件资源的使用效率 :o) ) - 在这里,如果有人在 ZeroMQ 实例化上支付费用,那么这些实例化的非零成本和“只是”一个套接字一样似乎没有任何好处从成本上看,这种行为具有负面的性能 yield ,并且对智能、集群范围的 ZeroMQ 服务(无论是 N+1 或 N+M 冗余、低延迟智能节点间集群信令、密码学、廉价的安全驱动的白名单,或任何可能代表任何额外的 HPC 级项目利益的东西,这可能证明初始 ZeroMQ 实例化的成本是合理的)。
<小时/>ZMQ_STREAM
的定义原型(prototype)可能提供一些工具,但是,引用。上面A socket of type
ZMQ_STREAM
is used to send and receive TCP data from a non-ØMQ peer, when using thetcp://
transport. AZMQ_STREAM
socket can act as client and/or server, sending and/or receiving TCP data asynchronously.
When receiving TCP data, aZMQ_STREAM
socket shall prepend a message part containing the identity of the originating peer to the message before passing it to the application. Messages received are fair-queued from among all connected peers.
When sending TCP data, a ZMQ_STREAM socket shall remove the first part of the message and use it to determine the identity of the peer the message shall be routed to, and unroutable messages shall cause anEHOSTUNREACH
orEAGAIN
error.
To open a connection to a server, use thezmq_connect
call, and then fetch the socket identity using theZMQ_IDENTITY
zmq_getsockopt
call.
To close a specific connection, send the identity frame followed by a zero-length message (see EXAMPLE section).
When a connection is made, a zero-length message will be received by the application. Similarly, when the peer disconnects (or the connection is lost), a zero-length message will be received by the application.
You must send one identity frame followed by one data frame. TheZMQ_SNDMORE
flag is required for identity frames but is ignored on data frames.
ZMQ_STREAM
示例:
void *ctx = zmq_ctx_new (); assert (ctx && "Context Instantiation Failed..." );
void *socket = zmq_socket (ctx, ZMQ_STREAM); assert (socket && "socket Instantiation Failed..." );
int rc = zmq_bind (socket, "tcp://*:8080"); assert (rc == 0 && "socket.bind() Failed..." );
uint8_t id [256]; /* Data structure to hold the ZMQ_STREAM ID */
size_t id_size = 256;
uint8_t raw [256]; /* Data structure to hold the ZMQ_STREAM received data */
size_t raw_size = 256;
while (1) {
id_size = zmq_recv (socket, id, 256, 0); assert (id_size > 0 && "Get HTTP request; ID frame and then request; Failed..." )
do {
raw_size = zmq_recv (socket, raw, 256, 0); assert (raw_size >= 0 && "socket.recv() Failed..." );
} while (raw_size == 256);
char http_response [] = /* Prepares the response */
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/plain\r\n"
"\r\n"
"Hello, World!";
zmq_send (socket, id, id_size, ZMQ_SNDMORE); /* Sends the ID frame followed by the response */
zmq_send (socket, http_response, strlen (http_response), 0);
zmq_send (socket, id, id_size, ZMQ_SNDMORE); /* Closes the connection by sending the ID frame followed by a zero response */
zmq_send (socket, 0, 0, 0);
}
zmq_close (socket);
zmq_ctx_destroy (ctx);
<小时/>
zmq_getsockopt()
可以提供 POSIX/SOCKET 描述符,用于低级技巧<小时/>The
ZMQ_FD
option shall retrieve the file descriptor associated with the specified socket. The returned file descriptor can be used to integrate the socket into an existing event loop; the ØMQ library shall signal any pending events on the socket in an edge-triggered fashion by making the file descriptor become ready for reading.
The ability to read from the returned file descriptor does not necessarily indicate that messages are available to be read from, or can be written to, the underlying socket; applications must retrieve the actual event state with a subsequent retrieval of theZMQ_EVENTS
option.
The returned file descriptor is also used internally by thezmq_send
andzmq_recv
functions. As the descriptor is edge triggered, applications must update the state ofZMQ_EVENTS
after each invocation ofzmq_send
orzmq_recv
.
To be more explicit: after calling zmq_send the socket may become readable (and vice versa) without triggering a read event on the file descriptor.
The returned file descriptor is intended for use with apoll
or similar system call only. Applications must never attempt to read or write data to it directly, neither should they try to close it.
Option value type:int
on POSIX systems, SOCKET on Windows
了解更多details on ZeroMQ tricks人们可能会喜欢阅读此处已经讨论过的解决方案、性能基准、延迟削减详细信息以及其他解决问题的技巧。
关于c - ZeroMQ - 模拟多个客户端到一台服务器的标准套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588005/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!