我正在使用Node.js和Socket.io編寫服務器/客戶端,並使用OpenShift進行託管。當我在本地運行代碼時,客戶端和服務器連接正常,但是一旦在OpenShift上,客戶端拒絕連接。Socket.io返回Uncaught RangeError和服務器上的文字javascript代碼,但本地正常工作
在本地,請求http://127.0.0.1:8000/socket.io/?EIO=2&transport=polling&t=1409632875121-110
將返回適當的JSON響應。然而,在服務器上,請求是(編輯)超時。
(編輯:以前錯誤返航字面上的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');
任何想法爲什麼這是在本地主機上工作,但沒有託管?
編輯:我相信「字符串長度」錯誤實際上是客戶端沒有找到服務器運行的症狀。我改變了代碼(如上所述)以確保客戶端連接到的IP與服務器上的IP相同。儘管如此,本地工作。上傳時崩潰。
編輯2:使用IP地址或在客戶端上連接的文字URL都會導致連接超時錯誤。
使用文字url會導致「Uncaught RangeError」,我認爲客戶端找不到服務器。當我更改爲IP時,我得到一個超時錯誤,而這可能也找不到服務器。 – FunkyDelPueblo 2014-09-02 15:45:42
您的服務器應該在端口8080上監聽,而不是8000端口,但是可以在端口8000上從外部訪問它。 – 2014-09-02 15:49:27
Node.js當前正在端口8080上進行服務,因此無法在同一端口上啓動Socket.io服務器港口。我嘗試了9080的服務和9000訪問,但仍然超時。 – FunkyDelPueblo 2014-09-02 16:51:26