【发布时间】:2015-05-31 04:24:39
【问题描述】:
我有一个带有 socket.io (1.3.5) 的简单 node.js 应用程序,取自 socket.io 示例:
// Setup basic express server
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
server.listen(port, function () {
console.log('Server listening at port %d', port);
});
// Routing
app.use(express.static(__dirname + '/public'));
io.of('/admin').on('connection', function(socket){
//handle conection on /admin namespace
});
io.of('/user').on('connection', function(socket){
//handle conection on /user namespace
});
现在在我的前端,我连接到这些特定的命名空间,就像这样(再次,取自示例):
var admin_socket = io('/admin');
var user_socket = io('/user');
应用程序在端口 3000 上运行,并使用 URL localhost:3000 打开网站。
这样做时我收到 CORS 错误,似乎客户端的 Socket.io 在我开始使用命名空间时不会自动检测端口号(在 Firefox 开发工具中,我可以看到请求转到 localhost/ 而不是 @ 987654325@)。
如果在我的服务器端我不使用命名空间:
io.on('connection', function(socket){
//handle general conection
});
在前端我这样连接:
var socket = io();
一切正常,端口自动发现工作正常,在 Firefox 开发工具中,我可以看到与 localhost:3000/ 的连接。
或者,如果我仍然在后端使用命名空间,而在前端我会这样连接:
var admin_socket = io('localhost:3000/admin');
var user_socket = io(':3000/user'); //I can skip localhost
再次一切正常(实际上在 Firefox 开发工具中,我可以看到网络请求转到 localhost:3000/)。
为什么端口自动发现不适用于命名空间?有没有办法让它工作?我在这里错过了什么吗?谢谢。
请参阅下面的答案以获取修复...
【问题讨论】:
-
这个 bug 真的很烦人,在任何旧版本的 socket.io 中都没有。感谢您的修复!
-
1.3.6 中仍然存在的错误,它占用了我一天的时间。非常感谢这篇带有修复的文章 - 我发现它在默认命名空间中工作时停滞不前。
-
你能把你的answer从question移到answer中吗?
标签: javascript node.js websocket socket.io