使用node-ipc和unix套接字在NodeJS和C之间进行通信

我想通过Unix套接字使用node-ipc在NodeJS和C程序之间进行通信,根据该主页,这是最快的选择。 (他们将在同一台机器上)。 该软件包声称它可以与C程序通信。 (我必须进行健全检查)。

问题是示例不提供示例C代码,我接下来不知道如何让他们说话。

有人能指出我的C代码示例来匹配那些客户端/服务器示例吗? 例如, 我如何调整本教程在C中使用unix管道 (假设我不完全偏离轨道?!也许它是我想要的“ 域套接字 ”?)这对我来说没有任何意义,我我错过了至关重要的事情。

我最终使用下面的代码完成了它。 你可以免费获得它!

server.c

#include  #include  #include  #include  #include  char *socket_path = "/tmp/icp-test"; int main(int argc, char *argv[]) { struct sockaddr_un addr; char buf[100]; int fd,cl,rc; if (argc > 1) socket_path=argv[1]; if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { perror("socket error"); exit(-1); } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; if (*socket_path == '\0') { *addr.sun_path = '\0'; strncpy(addr.sun_path+1, socket_path+1, sizeof(addr.sun_path)-2); } else { strncpy(addr.sun_path, socket_path, sizeof(addr.sun_path)-1); unlink(socket_path); } if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { perror("bind error"); exit(-1); } if (listen(fd, 5) == -1) { perror("listen error"); exit(-1); } while (1) { if ( (cl = accept(fd, NULL, NULL)) == -1) { perror("accept error"); continue; } while ( (rc=read(cl,buf,sizeof(buf))) > 0) { printf("read %u bytes: %.*s\n", rc, rc, buf); } if (rc == -1) { perror("read"); exit(-1); } else if (rc == 0) { printf("EOF\n"); close(cl); } } return 0; } 

client.js:

  var ipc=require('node-ipc'); var socketId = 'icp-test'; ipc.config.id = 'hello'; ipc.config.socketRoot = '/tmp/'; ipc.config.appspace = ''; ipc.config.retry= 1500; ipc.connectTo( socketId, function(){ ipc.of[socketId].on( 'connect', function(){ console.log("Connected!!"); ipc.log('## connected to world ##'.rainbow, ipc.config.delay); ipc.of[socketId].emit( 'message', //any event or message type your server listens for 'hello' ) } ); ipc.of[socketId].on( 'disconnect', function(){ console.log("Disconnected!!"); ipc.log('disconnected from world'.notice); } ); ipc.of[socketId].on( 'message', //any event or message type your server listens for function(data){ console.log("Got a message!!"); ipc.log('got a message from world : '.debug, data); } ); } ); 

另外,我已经意识到,如果你只想通过unix套接字与Node进行NodeJS之间的通信,那么NodeJS实际上已经有了一个模块来实现这一点 。 事实certificate,这是node-ipc在引擎盖下使用的内容。 因此,使用NodeJS的net包可能更容易。 之前的问题指出了如何在NodeJS中进行IPC。 只需将它与上面的C代码结合起来。

我认为你应该寻找C unix域套接字,而不是管道。 管道不同。 在Google上使用unix域套接字查找一些C代码示例,尝试一些,使其工作,然后返回到node-ipc的东西。

我关闭了node-ipc和node.js标签,因为如果你想先找出C端,那么Node是不相关的。