我正在上的AWS EC2實例+的NodeJS快遞+ socket.io + httpd的應用。延遲socket.io響應,並 「警告 - WebSocket連接無效」
在加載該頁面時,記錄儀提供了這樣的信息:
GET/200 2ms - 1.23kb
GET /javascripts/script.js 304 1ms
debug - served static content /socket.io.js
GET /stylesheets/style.css 304 1ms
GET /stylesheets/style.css 304 1ms
GET /images/052.png 304 1ms
GET /Candara.ttf 304 1ms
debug - client authorized
info - handshake authorized EgWLPeyO2uiCTSui01CP
debug - setting request GET /socket.io/1/websocket/EgWLPeyO2uiCTSui01CP
debug - set heartbeat interval for client EgWLPeyO2uiCTSui01CP
warn - websocket connection invalid
info - transport end (undefined)
debug - set close timeout for client EgWLPeyO2uiCTSui01CP
debug - cleared close timeout for client EgWLPeyO2uiCTSui01CP
debug - cleared heartbeat interval for client EgWLPeyO2uiCTSui01CP
在這一點上,事情會暫停約5秒鐘,之後:
debug - setting request GET /socket.io/1/xhr-polling/EgWLPeyO2uiCTSui01CP?t=1376937523124
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client EgWLPeyO2uiCTSui01CP
debug - setting request GET /socket.io/1/xhr-polling/EgWLPeyO2uiCTSui01CP?t=1376937523490
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client EgWLPeyO2uiCTSui01CP
這點之後,事情開始據我可以告訴運轉良好,事件被觸發,無延遲接收(如果事件被觸發之前話,5秒上述延誤,他們將不會被處理,直到延時完成後)。問題是如何消除5秒的延遲。
客戶端JS是這樣的:
window.onload = function() {
var socket = io.connect("http://xxx.us-west-2.compute.amazonaws.com", {resource: "/socket.io"});
服務器端JS是這樣的:
var express = require('express');
var app = express();
var io = require("socket.io").listen(app.listen(3000));
我的httpd.conf文件看起來是這樣的:
ProxyPreserveHost On
ProxyPass/http://localhost:3000/
ProxyPassReverse/http://localhost:3000/
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
allow from all
</Location>
如何避免初始延遲並建立與socket.io的健康連接?
的問題很可能在您的代理。您正在運行的版本是否全面支持websockets? – dc5
我只是運行Apache/2.2.25。你的意思是我需要對Apache做些什麼? – WindChimes
可能 - 是的。對websockets的支持可能會或可能不會在該版本中(我不確定),或者你只需要調整配置。從你的問題的描述來看,這聽起來像socket.io正在回落到長輪詢。如果您還沒有這樣做,請將socket.io置於詳細調試模式 - 它會告訴您它正在嘗試哪些協議。 – dc5