当前位置: 首页 > 面试题库 >

如何将两个node.js服务器与websockets连接?

闾丘博超
2023-03-14
问题内容

这是我的问题:

我有服务器A,运行node.js并使用socket.io与客户端(Web浏览器)进行通信。这一切都很好,花花公子。

但是,现在我有了服务器B,也需要通过websocket连接到服务器A,所以我遇到了麻烦。我发现的所有node.js
websocket客户端都无法与服务器A上的socket.io一起使用。

所以,这就是我正在努力的情况:

.--------.      .----------.      .----------.
| CLIENT | <--> | SERVER A | <--> | SERVER B |
'--------'      '----------'      '----------'

客户端-服务器连接是通过socket.io完成的

现在,服务器B(运行node.js)应通过websocket连接到服务器A(以通过端口80)。但…

甚至socket.io-client模块中的示例代码也不起作用…:/

// Connect to server
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();

// Add a connect listener
socket.on('connect', function(socket) { 
    console.log('Connected.');
});

代码通过时没有任何错误,执行在几秒钟后结束。

更新:代码示例

服务器(工作正常)如下所示:

// Load requirements
var http = require('http'),
    io = require('socket.io');

// Create server & socket
var server = http.createServer(function(req, res){

    // Send HTML headers and message
    res.writeHead(404, {'Content-Type': 'text/html'});
    res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);

// Add a connect listener
io.sockets.on('connection', function(socket) {

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() {
        console.log('Client disconnected.');
    });
});

客户看起来像这样

console.log('1');

// Connect to server
var io = require('socket.io-client')
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) { 
    console.log('Connected!');
});

console.log('3');

1、2和3可以正常打印,没有错误,几秒钟后该过程就退出了

另外,即使我在“ everything”上设置了socket.io日志记录,服务器A也不向日志输出任何内容。


问题答案:

事实证明,由于某些原因,我使用了旧示例,即使我对它们进行了三遍检查。好吧

同样,事实证明,socket.io-client在最新的节点(6.xx)上已损坏。设法从github找到了一个更新,替换了文件,是的,一切正常!

编辑 :不幸的是,我没有保存到工作示例的任何链接,但是在快速浏览了代码之后,似乎唯一的更改是对客户端代码的更改,现在看起来像这样:

console.log('1');

// Connect to server
var io = require('socket.io-client')
var socket = io.connect('localhost:8080', {reconnect: true});

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) { 
    console.log('Connected!');
});

console.log('3');


 类似资料:
  • 我的应用程序运行在Suse Linux和IBM JDK 8上。代码为 问题是 驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“SQL Server返回了不完整的响应。连接已关闭 如果我将jdk从IBM更改为Oracle,应用程序将运行。如何将sqlserver与IBM JDK连接? java版本“1.8.0”java(TM)SE运行时环境(build pxa

  • 我正在使用MSSQL 2014最新的JDK最新的ELK堆栈logstash.conf文件,但得到这个问题,当我与SQL服务器连接

  • 我使用Sabre DAV在PHP中实现了一个webdav目录,用于我的网站(Application Server Webinterface)。 对于这个网站,我现在使用C#编写了一个TCP套接字,它运行在另一个服务器上(实际上它在同一个数据中心,但从理论上讲,它在另一个半球上)。 我想连接我的网络Dav到我的套接字的FTP服务器,这意味着文件监听,下载,上传。用户只能连接到一个服务。想象一下,我的

  • 我们刚刚在Windows和Linux上安装了JProfiler。安装似乎进行得很顺利。 然后,我们在不同的Linux机器上安装了ejtlicense服务器,这似乎也进行得很顺利。 但是,当我们尝试从安装了JProfiler的Windows或Linux连接到Linux许可证服务器时,我们会收到一条错误消息,指出与许可证服务器通信时出错。 这两个系统都可以ping许可证服务器的主机名和IP地址。我已经

  • 问题内容: 我已经安装并正在osx上运行一个node.js服务器。我已经释放了一个聊天模块,并且正在愉快地运行它。我更改了一些内容,需要重新启动服务器才能看到效果。 我只知道如何通过关闭终端窗口,然后重新对其进行操作,然后再次运行节点chatdemo.js来重新启动。 有什么方法可以重启而不关闭终端吗? 谢谢。 问题答案: 如果它仅在运行(不是守护程序),则使用。 如果是守护进程,则可以尝试: 凡