【发布时间】:2021-06-28 05:43:08
【问题描述】:
我有一个简约的 socket.io,它在 Node.js 上运行,带有一个 HTML 客户端。
这是我的极简服务器代码(server.js):
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
console.log(`new connection : ${socket.id}`);
});
和我的极简客户端代码(client.html):
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.js"></script>
<script>
var socket = io('http://localhost:3000/');
</script>
<title>Document</title>
</head>
<body>
</body>
</html>
当我打开 client.html 时,我收到消息:
new connection : DedBsiEyAHLIu86oAAB0
这很好,但是在 7-8 秒后,我收到了其他具有不同套接字 ID 的新连接消息:
new connection : K3DUMN7SJ0tOU7TsAACO
new connection : 3kCOVCz9fwRWtIypAACP
new connection : HgMVgpeP7raq1c4YAACQ
new connection : U6-lD-3lT1vT39_oAACR
new connection : aQCKYpBUVXD7t8WIAACS
在 Chrome devtools-network 选项卡上,显示相同的重复消息(填充新连接):
Request URL: http://localhost:3000/socket.io/?EIO=4&transport=polling&t=NYCWok4
Request Method: GET
Status Code: 200 OK
Remote Address: [::1]:3000
Referrer Policy: strict-origin-when-cross-origin
非常感谢您的帮助。
问候
皮埃尔。
【问题讨论】:
-
如果指定传输层会发生什么? (看起来您使用长轮询)它可能会退回到长轮询并尝试重新连接 io.connect(server, { "transports": ['websocket'] })
-
我意识到我在 Chrome 中使用了一个 CORS 启用插件,我禁用它解决了我的问题。
标签: html node.js server socket.io client