如何使用Socket.io-client获取Node.js实例与另一个在cloudfoundry上运行Socket.io的Node.js实例进行通信?

时间:2013-03-12 15:58:40

标签: node.js socket.io

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

我唯一能想到的是cloudfoundry上的nginx导致了一些破坏。对我来说,浏览器中的javascript客户端可以连接并发送和接收数据是没有意义的,而基本相同的Node.js代码是从Web浏览器无法连接的同一台机器上运行的。任何想法或我应该离开云计算?

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

});

1 个答案:

答案 0 :(得分:0)

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

  1. 什么都不做,
  2. 尝试连接两次然后失败,或
  3. 仅连接以立即断开连接。
  4. 你必须使用名为sticky sessions的东西来解决这个问题。请参阅此link,它解释了问题并提供了解决方案。