我正在使用Node.js和Socket.io编写服务器/客户端并使用OpenShift托管它。当我在本地运行代码时,客户端和服务器正确连接,但是在OpenShift上,客户端拒绝连接。
在本地,请求http://127.0.0.1:8000/socket.io/?EIO=2&transport=polling&t=1409632875121-110
将返回适当的JSON响应。但是,在服务器上,请求是( EDIT )超时。
(编辑:以前错误正在以字面方式返回socket.io/index.js
的代码内容并抛出:"未捕获的RangeError:无效的字符串长度"在sockets.io.js:3947
)
服务器
self.server = require('http').createServer(self.app);
self.io = require('socket.io').listen(self.server);
self.io.set('transports', ['websocket', 'polling', 'xhr-polling', 'jsonp-polling']);
...
self.routes['/myip'] = function(req, res){
res.setHeader('Content-Type', 'text/html');
res.send("" + self.ipaddress);
}
...
self.app.listen(self.port, self.ipaddress, function() {
console.log('%s: Node server started on %s:%d ...',
Date(Date.now() ), self.ipaddress, self.port);
});
self.server.listen("8000", self.ipaddress, function(){
console.log("Starting another server");
});
客户端
var request = new XMLHttpRequest();
request.open('GET', '/myip', false); // I want it synchronous
request.send(null);
if (request.status === 200) {
var ip = request.responseText
console.log(ip);
socket = io.connect("http://" + ip + ":8000");
}else{
socket = io.connect();
alert('There were issues connecting to server. Expect odd issues.');
}
socket.emit('set-host');
有关为什么这个在localhost上运行而不在托管的时候有任何想法?
编辑:我相信"字符串长度"错误实际上是客户端未找到服务器运行的症状。我更改了代码(如上所示)以确保客户端连接的IP与服务器上的IP相同。仍然在当地工作。上传时分解。
编辑2 :使用IP地址或文字网址在客户端上进行连接都会导致连接超时错误。
答案 0 :(得分:0)
我认为您应该使用您的openshift网址(类似于app-domain.rhcloud.com)而不是服务器的IP地址,因为所有内容都是使用虚拟主机托管的。此外,您的服务器应该侦听端口8080而不是8000,但客户端应该使用您的openshift URL在端口8000上访问它。