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

Posted

技术标签:

【中文标题】是否可以在 node.js 服务器上设置运行(服务器端)的 socket.io 客户端?【英文标题】:Is it possible to set up a socket.io client running (server-side) on a node.js server? 【发布时间】:2012-03-30 01:29:29 【问题描述】:

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

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

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

但是,事实证明,服务器端 socket.io 实现不提供“连接”方法,仅提供侦听方法。

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

【问题讨论】:

客户端库正是您所追求的吗? github.com/LearnBoost/socket.io-client 我可以将它插入到 node.js 应用程序中吗?我如何要求()它?据我所知,它是为基于浏览器的使用而设计的。 查看这个 s/o 线程:***.com/questions/6785979/… 如果我运行一个节点实例作为服务器(require("socket.io")),另一个作为客户端(require("socket.io-client")),我可以建立连接——客户端也支持节点。 我不明白。当我输入 require("socket.io-client") 时出现错误。 【参考方案1】:

好的,多亏了上面 cmets 中的@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");

一切正常。

那么,谢谢大佬!

【讨论】:

var client = require("socket.io-client"); var socket = client.connect("http://localhost:3000"); socket.emit("test", "foo"); 这对我有用。【参考方案2】:

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

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

【讨论】:

因为我是 sockets 的新手。如果在 client.emit("test","foo") "foo" 是一个流并且 test 是一个 blob,那么如何处理这个请求,就像这个客户端.emit("blob",stream) 更清楚地说,我正在寻找服务器端脚本(server.js)并将门户设置为监听帮助!!?【参考方案3】:

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

【讨论】:

我明白这一切。情况是我有一个基于 socket.io 的 Web 应用程序,它已经建立了浏览器 节点通信并构建了整个 API。我希望能够启动 node.js 的本地实例并将其连接到 Arduino,然后将其作为现有 socket.io 会话上的另一个项目连接。这有意义吗? 当然,听起来很有趣。祝你好运。

以上是关于是否可以在 node.js 服务器上设置运行(服务器端)的 socket.io 客户端?的主要内容,如果未能解决你的问题,请参考以下文章

在Ubuntu 14.04上设置生产环境可用的Node.js

如何将 Node.js 设置为始终在服务器(如 Apache)上运行 [重复]

我是否需要一台不同的服务器来运行node.js

黑客可以访问/复制/下载部署在Node Js上的JS服务器端代码吗?

为什么同时运行VSCode可以显着提高Windows服务器上的Node.js性能?

node 怎么在服务器上运行?