【发布时间】:2021-11-26 05:21:34
【问题描述】:
这个问题有多种答案,但要么已经过时(我认为“重新连接”事件不再存在?),要么对我不起作用。
我有大量数据,客户端通过 socket.io 套接字从服务器等待。直到 10-15 分钟后,超过 1600 个结果套接字重新连接都可以。重新连接发生后,我不再获得服务器发出的数据,我认为这是因为我丢失了原始套接字连接的事件。
我必须刷新才能继续获取该数据。
如何在每次重新连接后重新连接到 socket.io?
客户:
socket.js(上下文)
import { createContext } from 'react';
import io from 'socket.io-client';
export const socket = io('http://localhost:5000');
export const SocketContext = createContext();
布局.js
import { socket, SocketContext } from '../context/socket'
function MyApp({ Component, pageProps }) {
return <SocketContext.Provider value={socket}>
<Layout>
<Component {...pageProps} />
</Layout>
</SocketContext.Provider>
}
页面(next.js)
import { SocketContext } from '../context/socket';
...
const socket = useContext(SocketContext);
useEffect(() => {
socket.emit('joined', socketChannel);
socket.on(socketChannel, handleStream);
}, []);
服务器:
index.js(使用fastify-socket.io)
fastify.io.on('connection', socket => {
socket.on('joined', (channel) => {
socket.join(channel);
})
});
redis.subscriber.on('message', (channel, message) => {
io.to(channel).emit(channel, message);
});
【问题讨论】:
-
默认情况下会自动重新连接。您使用
forceNew: true有什么原因吗?好像您正在管理 React Context 中的连接,您可以分享该代码吗? -
我试图从另一个答案管理连接,但没有成功,我会更新并修复代码。
-
你能分享
createContext()代码吗,我假设这使用React.Context? -
@SamuelGoldenbaum 我已经做过了,我想我说得不够清楚,更新了问题。
-
好的,我想我发现了问题
标签: javascript reactjs socket.io next.js fastify