React JS socket.io-client开启多个连接

React JS socket.io-client opens multiple connections

我有一个连接到套接字 io 服务器的简单 React JS 应用程序。每当我在浏览器中打开应用程序时,客户端每 5 秒向服务器发送一次新的连接请求。

服务器:

const express = require('express');
const app = express();
const http = require('http');

const server = http.createServer(app);
const io = require('socket.io')(server);

io.on('connection', (socket) => {
    console.log('socket id:', socket.id);

})

server.listen(3001, () => {
    console.log('Listening on port 3001');
})

客户:

import React from 'react';
import io from 'socket.io-client';

const socket = io('http://localhost:3001');

const App = () => {

  return (
    <div>Hi there!</div>
  );
}

export default App;

服务器上的日志:

socket id: ByXQEMgeVaQ5AGw1AAAA
socket id: 8LzNQsyeYq7GSEvqAAAB
socket id: bbuYEs4kKzjxXuBsAAAC
socket id: vwprv4hnJbRlStG4AAAD

我怀疑我的笔记本电脑可能有问题,因为我在代码中没有发现任何错误,有什么想法吗?

提前致谢

您能否尝试将客户端套接字创建包装在只运行一次的 useEffect 中?我很好奇这种行为是否仍然出现。

import React from 'react';
import io from 'socket.io-client';

const socket = io('http://localhost:3001');

const App = () => {

  useEffect(() => {
    const socket = io('http://localhost:3001');
  }, [])

  return (
    <div>Hi there!</div>
  );
}

导出默认应用;

我建议在 useEffect 中调用 connect 和 return 在组件卸载时调用的 disconnect 方法。

const [socket, setSocket] = useState(null)
useEffect(() => {
  const newSocket = io('http://localhost:3001')
  setSocket(newSocket)

  return socket.disconnect()
}, [])

其实我刚刚找到了根本原因,我的客户端版本和服务器版本不匹配。我将客户端版本更新为 v4,现在可以正常使用了