Socket.io 和 Vagrant 无法建立 websocket 连接
Socket.io and Vagrant can't establish websocket connection
我设置了一个 Vagrant box,用于将 socket.io 应用程序从内部端口 5000 端口转发到外部端口 8081;当我尝试从客户端连接时,它开始对连接进行长轮询,但我没有看到来自服务器的任何类型的响应,并且服务器应用程序从不注册连接尝试。尽管连接没有失败或 return 任何错误响应代码,它只是 return 一个带有空白响应的 200 代码。
// 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(', '));
});
当我尝试直接从我的 PC 上的应用程序 运行 连接时,同一个应用程序工作正常,所以我的代码似乎不是这里的问题,特别是考虑到它基本上是如何复制的文档中的基本示例;不太确定如何从这里解决这个问题。
这是当您同时使用同一代码库处理两个不同问题时突然出现的那些非常愚蠢的错误之一。这是中断的客户端代码行:
var socket = io('127.0.0.1:8081/?access_token=1d845e53c4b4bd2e235a66fe9c042d75ae8e3c6ae', {path: '/auth/socket.io'});
请注意,path
键设置为指向一个子目录,/auth
,这是我工作的遗留物,用于获取代理到服务器正在处理的内部端口的 nginx 文件夹.
我设置了一个 Vagrant box,用于将 socket.io 应用程序从内部端口 5000 端口转发到外部端口 8081;当我尝试从客户端连接时,它开始对连接进行长轮询,但我没有看到来自服务器的任何类型的响应,并且服务器应用程序从不注册连接尝试。尽管连接没有失败或 return 任何错误响应代码,它只是 return 一个带有空白响应的 200 代码。
// 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(', '));
});
当我尝试直接从我的 PC 上的应用程序 运行 连接时,同一个应用程序工作正常,所以我的代码似乎不是这里的问题,特别是考虑到它基本上是如何复制的文档中的基本示例;不太确定如何从这里解决这个问题。
这是当您同时使用同一代码库处理两个不同问题时突然出现的那些非常愚蠢的错误之一。这是中断的客户端代码行:
var socket = io('127.0.0.1:8081/?access_token=1d845e53c4b4bd2e235a66fe9c042d75ae8e3c6ae', {path: '/auth/socket.io'});
请注意,path
键设置为指向一个子目录,/auth
,这是我工作的遗留物,用于获取代理到服务器正在处理的内部端口的 nginx 文件夹.