在运行在Node.js服务器上的socket.io客户端上设置是否可能?

27

我想在两个或多个不同的node.js应用服务器之间启用基于套接字的P2P通信。 我正在使用socket.io来处理给定服务器与其服务的Web应用程序之间的所有此类通信 - 但我要寻找的是一种服务器对服务器通信的方式。

最初,我认为这只需要像下面这样简单:

var io = require("socket.io");
var socket = io.connect("my remote endpoint");

但事实证明,服务器端的socket.io实现并没有提供“connect”方法,只提供了一个listen方法。

为什么会这样?为什么我不能将node应用程序服务器视为在其他地方运行的socket.io服务器的客户端?有没有办法实现这个功能呢?


3
客户端库是你想要的吗?https://github.com/LearnBoost/socket.io-client - pimvdb
请查看此 Stack Overflow 帖子:https://dev59.com/UVnUa4cB1Zd3GeqPa35l - Myk
2
如果我将一个节点实例作为服务器(require("socket.io")),另一个节点实例作为客户端(require("socket.io-client"))运行,我可以建立连接 - 客户端也支持节点。 - pimvdb
我不明白。当我输入 require("socket.io-client") 时,会出现错误。 - Myk
哦,嗯,如果我运行npm install socket.io-client,那么我就会安装一些东西。是时候开始玩耍了。 - Myk
显示剩余2条评论
3个回答

61

好的,感谢上面评论区的@pimvdb,我已经得到了一个可行的解决方案。

基本上,npm安装的socket.io库依赖于另一个模块,称为socket.io-client。在标准的socket.io安装中,它将被安装在node_modules/socket.io/node_modules/socket.io-client中。

但是,也可以运行 "npm install socket.io-client" 将其作为自己的一流公民库进行安装。

然后你的使用方式如下:

var client = require("socket.io-client");
var socket = client.connect("http://myendpoint.com:3000/whatever");
socket.emit("test", "foo");

一切都正常工作。

所以,谢谢你!


14
var client = require("socket.io-client"); var socket = client.connect("http://localhost:3000"); socket.emit("test", "foo");这对我有用。 - nullbuilt

6

为了澄清,这是一个带有监听器和触发事件的示例(并且不需要重新安装已经安装的模块)

var io = require('socket.io/node_modules/socket.io-client');

client = io.connect('http://'+CONFIG.host+':'+CONFIG.port);

client.on('connect',function() {
    client.emit("test","foo");
}); 

由于我对套接字不熟悉。如果在client.emit("test","foo")中"foo"是一个流,而test是一个blob,那么如何处理这个请求?类似这样的client.emit("blobs",stream),更明确地说,我正在寻找服务器端脚本(server.js)和设置门户以进行监听。求助!! - A Sahra

3
在开始使用socket.io进行服务器之间的通信之前......请注意,socket.io是设计为浏览器到服务器的通信基础设施。我并不确定它是否是点对点(P2P)服务器方案的最佳解决方案。此外,如果您需要服务器到服务器的通信,为什么不直接使用Websockets呢?Node.js有许多Websocket模块可供选择,例如https://github.com/einaros/ws

2
我理解所有的内容。情况是,我有一个基于socket.io的Web应用程序,已经建立了浏览器<->节点通信,并构建了整个API。我想要能够启动一个本地的node.js实例,并将其连接到Arduino,然后将其连接到现有的socket.io会话中作为另一个项目。这样说清楚了吗? - Myk
好的,听起来很有趣。祝你好运。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接