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

Is it possible to set up a socket.io client running (server-side) on a node.js server?

本文关键字:运行 一个 服务器端 客户端 io socket js node 服务器 是否 设置      更新时间:2023-09-26

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

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

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

然而,事实证明,服务器端socket.io实现并没有提供"连接"方法,只提供了一个侦听方法。

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

好吧,多亏了上面评论中的@pimvdb,我有了一个可行的解决方案。

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

然而,也可以说"npm installsocket.io-client",并将其作为自己的一流公民库进行安装。

然后你的用法看起来是这样的:

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

一切正常。

所以,谢谢伙计!

为了澄清起见,这是一个具有侦听器和发出事件的可能性的示例(并且无需再次安装已安装的模块)

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");
}); 

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