0

我正在尝试使用 Socket.io 和 Socket.io-client 使用 cloudfoundry 连接 2 个独立的 Node.js 服务器。当我使用本地运行的两个实例测试代码时,下面的 socket.io-client Node.js 代码按预期工作。当 socket.io 服务器是 cloudfoundry 时,浏览器中的一个简单的 javascript 客户端能够连接并正常工作。但是,当我尝试使用 socket.io-client Node.js 连接到在 cloudfoundry 上运行的实例时,它会以几种不同的方式失败。它要么什么都不做,尝试连接两次然后失败,要么只连接以立即断开连接。

我唯一能想到的是 cloudfoundry 上的 nginx 导致了一些问题。对我来说,浏览器中的 javascript 客户端可以连接并发送和接收数据是没有意义的,而基本相同的 Node.js 代码运行在与 Web 浏览器无法连接的同一台机器上。有什么想法,还是我应该离开 Cloudfoundry?

var socketioclient = require('socket.io-client').connect('http://someapiaddress.cloudfoundry.com');

socketclient = socketioclient.socket;
socketclient.on('connect_failed', function(){
    console.log('Connection Failed');
});

socketclient.on('connecting', function(){
    console.log('connecting')
});

socketclient.on('connect', function(socket) {
    console.log('Connected!');

    socketclient.on('message', function(data){
       console.log(data)
    });
    socketclient.on('disconnect', function(){
       console.log('disconnect')
 });

});

4

1 回答 1

0

是的,nginx如果您运行多个服务器实例,每次都拦截请求并将 socket.io 请求发送到不同的服务器实例,则会产生问题。这就是为什么您会收到许多不同的错误:

  1. 什么也没做,
  2. 尝试连接两次然后失败,或者
  3. 确实连接只是为了立即断开连接。

你必须使用调用的东西sticky sessions来处理这个问题。请参阅此链接,该链接解释了问题并提供了解决方案。

于 2013-03-12T18:22:02.053 回答