我已经构建了一个React应用,该应用通过socket.io连接到本地运行的Express节点服务器。一切正常,但是经过100多个小时的发送请求后,并且侦听了从本地服务器到客户端的那些更改,它开始变慢并且无法有效工作,直到我重新加载客户端窗口会话。
我很难解决这个问题。您是否认为这与我的节点服务器设置有关,还是与我的客户端有关?也许是硬件问题?我注意到的一件事是,客户端如何保持从控制台连接到socket.io。
const express = require('express')
const http = require('http')
const socketIO = require('socket.io')
// localhost port
const port = 4001
const app = express()
// server instance
const server = http.createServer(app)
// creates socket
const io = socketIO(server)
io.on('connection', socket => {
socket.on('change view', (view) => {
console.log('view changed to: ', view)
io.sockets.emit('change view', view)
})
})
server.listen(port, () => console.log(`Listening on port ${port}`));
反应应用程序客户端:
componentDidMount() {
const socket = socketIOClient(this.state.endpoint);
socket.on('change view', (col) => {
callAfunctionThatDoesSomething(col);
})
};
当我将更改发送到服务器时
send = () => {
const socket = socketIOClient(this.state.endpoint);
socket.emit('change view', this.state.view);
}
有什么想法吗?
答案 0 :(得分:0)
您两次连接到socket.io。首先在 componentDidMount ,然后在调用 send()时。不推荐使用。
您应该连接到插座一次。您可以在组件的componentDidMount方法中进行连接。但是如果要在多个组件中使用套接字。这还将多次连接到套接字。
我会说您在注册路线或整个应用程序时一次连接到套接字。我之前创建了一个示例应用程序。您可以检查一下。