我正在使用 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'}
除非我重新启动我的应用程序,否则我无法连接它(热重新加载也无济于事)。我已经尝试过forceNew
settrue
和false
,没有任何区别。如果我使用polling
传输而不是websocket
问题消失(连接建立并在断开/重新连接后成功工作),但我想使用 websockets。
我究竟做错了什么?(我不能使用 v3.x,因为服务器在 2.x 上)