是否可以在node.js服务器上设置运行(服务器端)的socket.io客户端?

时间:2012-03-13 15:58:14

标签: javascript sockets node.js socket.io p2p

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

我最初认为它会像这样简单:

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

然而,事实证明服务器端socket.io实现不提供“connect”方法,只提供listen方法。

这是为什么?为什么我不能将节点应用程序服务器视为在其他地方运行的socket.io服务器的客户端?有什么方法可以实现这个功能吗?

3 个答案:

答案 0 :(得分:56)

好的,所以感谢上面评论中的@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");

一切正常。

所以,谢谢你!

答案 1 :(得分: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");
}); 

答案 2 :(得分:2)

在socket.io上全速前进,进行服务器到服务器的通信..... socket.io被设计为服务器通信基础设施的浏览器。我很不确定它是P2P服务器的最佳解决方案。另外,如果你做服务器到服务器 - 为什么不只是做Websockets?节点有各种websocket模块 - 例如https://github.com/einaros/ws