0

我正在使用 React Native (0.63.4) 和 socket.io 客户端 (2.4.0) 连接到我的 socket.io 服务器:

 socket = io(MESSENGER_URL, {
            path: "/messenger",
            timeout: 4500,
            forceNew: true,
            transports: ['websocket'],
            transportOptions: {
              polling: {
                extraHeaders: { 'authorization': "Bearer " + accessTokenSelector(store.getState())! }
              },
              websocket: {
                extraHeaders: { 'authorization': "Bearer " + accessTokenSelector(store.getState())! }
              }
            }
        });

一切正常且稳定,直到连接间歇性中断。一旦断开连接并建立 Internet 连接,socket.io 就会进入这个无限循环:

SocketRocket: In debug mode.  Allowing connection to any root cert
node_modules/react-native/Libraries/Utilities/RCTLog.js:47
Error: websocket error
    at WS.Transport.onError (/path/to/my/app/node_modules/engine.io-client/lib/transport.js:68:13)
    at WebSocket.ws.onerror (/path/to/my/app/node_modules/engine.io-client/lib/transports/websocket.js:163:10)
    at WebSocket.dispatchEvent (/path/to/my/app/node_modules/event-target-shim/dist/event-target-shim.js:818:35)
    at /path/to/my/app/node_modules/react-native/Libraries/WebSocket/WebSocket.js:260:14
    at RCTDeviceEventEmitter.emit (/path/to/my/app/node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:189:33)
    at MessageQueue.__callFunction (/path/to/my/app/node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:416:27)
    at /path/to/my/app/node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:109:12
    at MessageQueue.__guard (/path/to/my/app/node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:364:9)
    at MessageQueue.callFunctionReturnFlushedQueue (/path/to/my/app/node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:108:10)
    at /path/to/my/app/.vscode/.react/debuggerWorker.js:199:58 {type: 'TransportError', description: Event, stack: 'Error: websocket error
    at WS.Transport.on…/.vscode/.react/debuggerWorker.js:199:58', message: 'websocket error'}

除非我重新启动我的应用程序,否则我无法连接它(热重新加载也无济于事)。我已经尝试过forceNewsettruefalse,没有任何区别。如果我使用polling传输而不是websocket问题消失(连接建立并在断开/重新连接后成功工作),但我想使用 websockets。

我究竟做错了什么?(我不能使用 v3.x,因为服务器在 2.x 上)

4

0 回答 0