WebSocket每30秒断开和连接一次+随机发送消息

kninwzqo  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(395)

Screenshot of terminal logs
在客户端,我使用y-websocket和Y.js,服务器端使用uWebsocket。每隔30秒,客户端断开连接,然后立即重新连接。除了初始消息外,不应该发送任何消息,但它在一段时间后出于某种原因发送了四条消息(阅读可能是严格模式的原因)。
服务器:

  1. const app = uWs.App().ws('/*', {
  2. compression: 0,
  3. maxPayloadLength: 16 * 1024 * 1024,
  4. idleTimeout: 10,
  5. open: (socket) => {
  6. console.log('A user connected');
  7. c = new Date().getTime()/1000
  8. },
  9. message: (socket, message, isBinary) => {
  10. console.log(`Received message: ${message}`);
  11. },
  12. drain: (socket) => {
  13. console.log('Socket backpressure: ' + socket.getBufferedAmount());
  14. },
  15. close: (socket) => {
  16. console.log('A user disconnected');
  17. console.log("Time from connection: ", new Date().getTime()/1000 - c)
  18. }
  19. }).listen(3000, (listenSocket) => {
  20. if (listenSocket) {
  21. console.log('Server listening on port 3000');
  22. }
  23. });

字符串
客户:

  1. const yArray = useRef()
  2. const wsProvider = useRef()
  3. useEffect(() => {
  4. const ydoc = new Y.Doc();
  5. yArray.current = ydoc.getArray("lines")
  6. wsProvider.current = new WebsocketProvider('ws://localhost:3000', 'whiteboard', ydoc)
  7. }, [])
  8. if(wsProvider.current){
  9. wsProvider.current.on('status', event => {
  10. console.log(event.status) // logs "connected" or "disconnected"
  11. })
  12. }


将idleEffect更改为0会得到相同的结果。不应该是任何与useEffect相关的内容,因为它只呈现一次,客户端当前不做任何事情。
尝试将其恢复到版本1.3.8,这是应该修复它的版本。将空闲时间更改为120,这是最高值并不会改变任何东西。我希望建立连接并保持连接,直到客户端离开/关闭。所有帮助都非常感谢!

sulc1iza

sulc1iza1#

  1. const [{ store, ws }] = useState(() => {
  2. const store = syncedStore({
  3. item: [] as {
  4. item: string;
  5. }[],
  6. });
  7. const ws = new WebsocketProvider(
  8. "ws://localhost:3000",
  9. "test-room",
  10. getYjsDoc(store)
  11. );
  12. return { store, ws };
  13. });```
  14. By using useState (should still only run once) and putting it in a syncedStore we managed to keep the connection from disconnecting. using useState instead of useEffect solved problem.

字符串

展开查看全部

相关问题