Socket.io 客户端:总是无效的命名空间消息
Socket.io Client: Always invalid namespace message
服务器代码:
import http from 'http';
import Koa from 'koa';
import { Server } from 'socket.io';
(async () => {
const app = new Koa();
var server = http.createServer(app.callback());
var io = new Server(server, {
path: '/seacher',
transports: ['websocket'],
});
io.on('connection', (socket) => {
setTimeout(() => socket.emit('message', { say: 'hello' }), 1000);
socket.on('message', (msg) => {
console.log('[msg]', msg);
});
});
server.listen(3000)
})();
客户代码:
var socket = io('http://localhost:3000/seacher', {
path: '/seacher',
autoConnect: false,
transports: ['websocket'],
});
socket.on('error', (err) => console.log('error', err));
socket.on('connect', () => console.log('connect'));
socket.connect();
浏览器/nodejs 控制台中没有任何消息。
在浏览器的“网络”选项卡中,很多连接都带有
等消息
将客户端代码更改为:
var socket = io('http://localhost:3000', { // note changed URL here
path: '/seacher',
autoConnect: false,
transports: ['websocket'],
});
path
选项指定 URL socket.io 将在内部使用的内容。你把它放在 path
选项中,就像你在客户端和服务器中所做的那样。
如果您在 URL 中添加了一些内容,就像您在 'http://localhost:3000/seacher'
中指定的那样,那么这就是您尝试连接的命名空间 /seacher
,但您的服务器不支持那个命名空间。
这是 socket.io 设计中令人困惑的部分,但路径和名称空间在 socket.io 中不是一回事。不要混淆或混合它们。
仅供参考,很少有理由像您所做的那样自定义 path
选项,除非您尝试 运行 多个 socket.io 服务器在同一个 http 上共享服务器(您似乎没有在做的事情)。默认情况下,路径是 /socket.io
这在日志和调试器以及访问客户端库时很有意义。我建议您从客户端和服务器中删除 path
选项,并让它默认为 /socket.io
。并且,不要在您的连接中使用路径 URL,因为它指定的是命名空间,而不是路径。
服务器代码:
import http from 'http';
import Koa from 'koa';
import { Server } from 'socket.io';
(async () => {
const app = new Koa();
var server = http.createServer(app.callback());
var io = new Server(server, {
path: '/seacher',
transports: ['websocket'],
});
io.on('connection', (socket) => {
setTimeout(() => socket.emit('message', { say: 'hello' }), 1000);
socket.on('message', (msg) => {
console.log('[msg]', msg);
});
});
server.listen(3000)
})();
客户代码:
var socket = io('http://localhost:3000/seacher', {
path: '/seacher',
autoConnect: false,
transports: ['websocket'],
});
socket.on('error', (err) => console.log('error', err));
socket.on('connect', () => console.log('connect'));
socket.connect();
浏览器/nodejs 控制台中没有任何消息。
在浏览器的“网络”选项卡中,很多连接都带有
等消息将客户端代码更改为:
var socket = io('http://localhost:3000', { // note changed URL here
path: '/seacher',
autoConnect: false,
transports: ['websocket'],
});
path
选项指定 URL socket.io 将在内部使用的内容。你把它放在 path
选项中,就像你在客户端和服务器中所做的那样。
如果您在 URL 中添加了一些内容,就像您在 'http://localhost:3000/seacher'
中指定的那样,那么这就是您尝试连接的命名空间 /seacher
,但您的服务器不支持那个命名空间。
这是 socket.io 设计中令人困惑的部分,但路径和名称空间在 socket.io 中不是一回事。不要混淆或混合它们。
仅供参考,很少有理由像您所做的那样自定义 path
选项,除非您尝试 运行 多个 socket.io 服务器在同一个 http 上共享服务器(您似乎没有在做的事情)。默认情况下,路径是 /socket.io
这在日志和调试器以及访问客户端库时很有意义。我建议您从客户端和服务器中删除 path
选项,并让它默认为 /socket.io
。并且,不要在您的连接中使用路径 URL,因为它指定的是命名空间,而不是路径。