gpt4 book ai didi

c - Node.js ZeroMQ 客户端不与 C ZeroMQ 服务器交换 REQ/REP 消息

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:37 41 4
gpt4 key购买 nike

使用 ZeroMQ 文档提供的示例,我无法让它们与用 C 编写的服务器和 node.js 客户端一起工作。

我使用的例子是:


// Hello World client in Node.js
// Connects REQ socket to tcp://localhost:5559
// Sends "Hello" to server, expects "World" back

var zmq = require('zmq')
, requester = zmq.socket('req');

requester.connect('tcp://localhost:5560');
var replyNbr = 0;
requester.on('message', function(msg) {
console.log('got reply', replyNbr, msg.toString());
replyNbr += 1;
});

for (var i = 0; i < 10; ++i) {
requester.send("Hello");
}


//  Hello World worker
// Connects REP socket to tcp://localhost:5560
// Expects "Hello" from client, replies with "World"

#include "zhelpers.h"
#include <unistd.h>

int main (void)
{
void *context = zmq_ctx_new ();

// Socket to talk to clients
void *responder = zmq_socket (context, ZMQ_REP);
//zmq_connect (responder, "tcp://localhost:5560");
// using bind instead of connect
zmq_bind (responder, "tcp://localhost:5560");

while (1) {
// Wait for next request from client
char *string = s_recv (responder);
printf ("Received request: [%s]\n", string);
free (string);

// Do some 'work'
sleep (1);

// Send reply back to client
s_send (responder, "World");
}
// We never get here, but clean up anyhow
zmq_close (responder);
zmq_ctx_destroy (context);
return 0;
}

我更改了端口,所以它们现在匹配 ( 5560 )。但是我没有传输任何数据。客户端和服务器都没有收到任何消息。

最佳答案

为什么?只是他们都只是一直在听

在哪里?

requester.connect(..)                               // in Node.js copy/paste code

回复

zmq_connect ( responder, "tcp://localhost:5560" );  // in C copy/paste code

ZeroMQ 信号/消息传递基础设施的逻辑有点复杂。

REQ/REP 的一侧必须 .bind() 和所有其他可以尝试 .connect()

这在原则上是有效的,适用于所有 ZeroMQ 可扩展正式通信模式原型(prototype),而不仅仅是 REQ/REP 原型(prototype)。

所以,在这个用例中,
任何一方——无论是 Node.js 还是 C——都可以以 .bind()
开头和
另一个将能够尝试.connect()到这样一个.bind()-prepared并准备好 IP:port# 目标。

   ..
int rc = zmq_bind( responder, "tcp://localhost:5560" );
/* zmq_bind()
returns:
* zero if successful.
* -1 otherwise
and
sets errno to one of the values
as defined in API.
*/
..

在 ZeroMQ 领域有很多好的实践可以遵循。注册和处理函数调用的返回码是 ZeroMQ 最佳实践中的一个主题。 Do not hesitate to learn faster and read through many man*years of a Collective-Experience in this here.

关于c - Node.js ZeroMQ 客户端不与 C ZeroMQ 服务器交换 REQ/REP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46503365/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com