2015-07-20 138 views
0

我有一個Vagrant框設置爲從內部端口5000到外部端口8081端口轉發socket.io應用程序;當我嘗試從客戶端連接時,它開始長時間輪詢連接,但是我沒有看到來自服務器的任何響應,並且服務器應用程序從未註冊過連接嘗試。連接不會失敗或返回任何錯誤響應代碼,但它只是返回空白響應的200代碼。Socket.io和Vagrant無法建立websocket連接

// Import utilities 
var http = require('http'), 
    socketIO = require('socket.io'), 
    querystring = require('querystring'); 

// Init servers/external connections 
var server = http.createServer(function baseHandler(req, res) { 
     // console.log(req.headers); 
     res.writeHead(200); 
     res.end(JSON.stringify({ 
      message: 'This server only supports WebSocket connections' 
     })); 
    }), 
    io = socketIO(server); 

server.listen(process.env.socket_port || 5000, function() { 
    var sockets = []; 
    console.log('App connected'); 

}); 

io.on('connection', function (socket) { 
    console.log('Socket connected'); 
    console.log('Socket in rooms '+ socket.rooms.join(', ')); 
}); 

相同的應用程序的工作原理,當我試圖從直接我的電腦上運行的應用程序連接起來,所以我的代碼似乎並沒有在這裏是問題就好了,尤其是考慮到它是如何基本上覆制的基本在文檔中的示例;不確定如何從這裏解決這個問題。

+0

你打開了TCP端口轉發而不是http? Web套接字使用TCP而不是HTTP。 –

+0

@JeffSloyer Vagrant轉發的端口默認爲TCP,HTTP協議甚至不涉及到Vagrant的網絡設置IIRC。 – moberemk

+0

你可以嘗試在你的流浪vm上做一個本地請求,以確保事情正常工作嗎? –

回答

1

這是當你在同一個代碼庫上同時處理兩個不同問題時出現的那些真正愚蠢的錯誤之一。下面是客戶端的代碼行這是打破:

var socket = io('127.0.0.1:8081/?access_token=1d845e53c4b4bd2e235a66fe9c042d75ae8e3c6ae', {path: '/auth/socket.io'}); 

注意path鍵設置爲指向一個子目錄,/auth,這是我的工作,吃剩的得到一個nginx的文件夾代理到內部端口,服務器正在運行。