2015-07-20 136 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的文件夹代理到内部端口,服务器正在运行。