我正在尝试使用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')
});
});
答案 0 :(得分:0)
是的,如果您运行多个服务器实例,每次都拦截请求并将socket.io请求发送到不同的服务器实例,nginx
会产生问题。这就是为什么你会遇到许多不同的错误:
你必须使用名为sticky sessions
的东西来解决这个问题。请参阅此link,它解释了问题并提供了解决方案。