I am writing an android app that needs to connect to a Socket.IO instance running on a node.js server.
Attempting to connect to the instance and transmitting data using an iOS device works flawlessly, but when I try to do it with an android device it fails.
I am using the Native java client, and this is the code I’m using on the android side:
mManager = new Manager(new URI("https://example.com"));
mSocket = mManager.socket("/users");
// socket events listeners
mSocket.on(Socket.EVENT_CONNECTING, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.v(TAG, "Caught EVENT_CONNECTING");
for (Object obj : args) {
Log.v(TAG, "Errors :: " + obj);
}
}
}).on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.v(TAG, "connected to the backend");
Log.v(TAG, String.format("JSON Obj to emit: %s", jsonObject.toString()));
mSocket.emit("hello_packet", jsonObject);
}
}).on(Socket.EVENT_RECONNECTING, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.v(TAG, "Caught EVENT_RECONNECTING");
for (Object obj : args) {
Log.v(TAG, "Errors :: " + obj);
}
}
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.v(TAG, "Socket disconnected");
}
}).on(Socket.EVENT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.v(TAG, "Caught EVENT_ERROR");
for (Object obj : args) {
Log.v(TAG, "Errors :: " + obj);
}
}
}).on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.v(TAG, "Caught EVENT_CONNECT_ERROR");
for (Object obj : args) {
Log.v(TAG, "Errors :: " + obj);
}
}
});
Log.v(TAG, "Connecting socket");
mSocket.connect();
Whenever I try to connect (Basically as soon as the line mSocket.connect();) The log prints the following lines:
05-07 22:41:36.684 15552-15552/com.my.app V/Main Activity: Connecting socket
05-07 22:41:36.699 15552-15858/com.my.app V/Main Activity: Caught EVENT_CONNECTING
05-07 22:41:36.926 15552-15866/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:36.926 15552-15866/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:41:38.189 15552-15884/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:41:38.189 15552-15884/com.my.app V/Main Activity: Errors :: 1
05-07 22:41:38.207 15552-15887/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:38.208 15552-15887/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:41:39.518 15552-15911/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:41:39.518 15552-15911/com.my.app V/Main Activity: Errors :: 2
05-07 22:41:39.531 15552-15915/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:39.531 15552-15915/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:41:41.846 15552-15949/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:41:41.846 15552-15949/com.my.app V/Main Activity: Errors :: 3
05-07 22:41:41.857 15552-15953/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:41.857 15552-15953/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:41:46.863 15552-16025/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:41:46.864 15552-16025/com.my.app V/Main Activity: Errors :: 4
05-07 22:41:46.879 15552-16029/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:46.879 15552-16029/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:41:51.883 15552-16126/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:41:51.883 15552-16126/com.my.app V/Main Activity: Errors :: 5
05-07 22:41:51.895 15552-16130/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:51.895 15552-16130/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:41:56.900 15552-16236/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:41:56.900 15552-16236/com.my.app V/Main Activity: Errors :: 6
05-07 22:41:56.921 15552-16240/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:41:56.921 15552-16240/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:01.927 15552-16357/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:01.927 15552-16357/com.my.app V/Main Activity: Errors :: 7
05-07 22:42:01.945 15552-16361/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:42:01.945 15552-16361/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:06.951 15552-16466/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:06.952 15552-16466/com.my.app V/Main Activity: Errors :: 8
05-07 22:42:06.969 15552-16470/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:42:06.970 15552-16470/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:11.975 15552-16545/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:11.976 15552-16545/com.my.app V/Main Activity: Errors :: 9
05-07 22:42:11.994 15552-16549/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:42:11.994 15552-16549/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:17.000 15552-16629/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:17.000 15552-16629/com.my.app V/Main Activity: Errors :: 10
05-07 22:42:17.012 15552-16633/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:42:17.012 15552-16633/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:22.017 15552-16710/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:22.017 15552-16710/com.my.app V/Main Activity: Errors :: 11
05-07 22:42:22.033 15552-16714/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:42:22.033 15552-16714/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:27.039 15552-16788/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:27.039 15552-16788/com.my.app V/Main Activity: Errors :: 12
05-07 22:42:27.056 15552-16792/com.my.app V/Main Activity: Caught EVENT_CONNECT_ERROR
05-07 22:42:27.056 15552-16792/com.my.app V/Main Activity: Errors :: io.socket.engineio.client.EngineIOException: xhr poll error
05-07 22:42:32.061 15552-16957/com.my.app V/Main Activity: Caught EVENT_RECONNECTING
05-07 22:42:32.062 15552-16957/com.my.app V/Main Activity: Errors :: 13
So I immediately get an xhr poll error after attempting to connect and all following connection attempts meet the same result.
I saw some posts saying such an issue might be cause by an SSL certificate issue though any attempts I made to temper with the SSL Context the Socket.IO library uses didn’t work.
If anyoen has an idea what I might be able to try to get this to work it would be excellent.
If any information or code sampels are missing, let me know and I’ll add them.
You want to:
- report a bug
- request a feature
Current behavior
I am experiencing trouble trying to make a web socket connection on react-native. I am not sure if this platform is supported or not, however, this error is reproducible on a regular node.js app. Strangely enough I only have trouble when react-native’s built in debugger is disabled. I am testing this on IOS 10.2 with react-native v0.43.1 and socket.io-client v1.7.3. My server is running socket.io v1.7.2 hosted on HTTP port 1337.
Steps to reproduce (if the current behaviour is a bug)
As soon as I implement socket.io-client in react-native and attempt a connection without the debugger enabled, it should reproduce with two errors based on the options. If I do not specify my transports option then the error would be XHR: POLLING ERROR. If I specify ‘websocket’ in my transports option then the error would become WEBSOCKET ERROR. Thats all I get.
Expected behavior
Regular web socket connection to my server. It works with the debugger enabled.
Setup
- OS: OSX El Capitan 10.11.6
- browser: I believe react-native uses webkit, however i am not sure.
- socket.io version: stated above
Other information (e.g. stacktraces, related issues, suggestions how to fix)
The only other issue I found related to this one was #1056 and I am surprised about how oddly related these issues are. I have retried the scenario on a regular node.js app and I experienced similar outcomes, however the errors were more detailed as shown below.
Without a specified transports option:
{ Error: xhr poll error
at XHR.Transport.onError (/path/to/root/node_modules/engine.io-client/lib/transport.js:64:13)
at Request.<anonymous> (/path/to/root/node_modules/engine.io-client/lib/transports/polling-xhr.js:129:10)
at Request.Emitter.emit (/path/to/root/node_modules/component-emitter/index.js:133:20)
at Request.onError (/path/to/root/node_modules/engine.io-client/lib/transports/polling-xhr.js:307:8)
at Timeout._onTimeout (/path/to/root/node_modules/engine.io-client/lib/transports/polling-xhr.js:254:18)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5) type: 'TransportError', description: 503 }
With transports: ['websocket']:
{ Error: websocket error
at WS.Transport.onError (/path/to/root/node_modules/engine.io-client/lib/transport.js:64:13)
at WebSocket.ws.onerror (/path/to/root/node_modules/engine.io-client/lib/transports/websocket.js:149:10)
at WebSocket.onError (/path/to/root/node_modules/ws/lib/WebSocket.js:452:14)
at emitOne (events.js:96:13)
at WebSocket.emit (events.js:189:7)
at ClientRequest.onerror (/path/to/root/node_modules/ws/lib/WebSocket.js:711:10)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:189:7)
at TLSSocket.socketErrorListener (_http_client.js:358:9)
at emitOne (events.js:96:13)
type: 'TransportError',
description:
{ Error: socket hang up
at TLSSocket.onHangUp (_tls_wrap.js:1117:19)
at Object.onceWrapper (events.js:291:19)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:186:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
code: 'ECONNRESET',
type: 'error',
target:
WebSocket {
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
_socket: null,
_ultron: null,
_closeReceived: false,
bytesReceived: 0,
readyState: 0,
supports: [Object],
extensions: {},
_binaryType: 'nodebuffer',
_isServer: false,
url: 'wss://SERVER_IP:1337/socket.io/?EIO=3&transport=websocket',
protocolVersion: 13 } } }
Also keep in mind, socket.io’s browser-based client works flawlessly connecting to this specific web server.
I have tried various different networks, ISP’s, and even VPN’s. I am clueless at this point.
Содержание
- Socket.io-client: Ошибка опроса XHR появляется при наличии отладчика
- Вы хотите:
- Текущее поведение
- Действия по воспроизведению (если текущее поведение является ошибкой)
- Ожидаемое поведение
- Настраивать
- Другая информация (например, трассировки стека, связанные проблемы, предложения по исправлению)
- Использование Socket.IO на Android всегда возвращает ошибку опроса XHR
- Socket.io-client: Ошибка опроса XHR появляется при наличии отладчика
- Вы хотите:
- Текущее поведение
- Действия по воспроизведению (если текущее поведение является ошибкой)
- Ожидаемое поведение
- Настраивать
- Другая информация (например, трассировки стека, связанные проблемы, предложения по исправлению)
Socket.io-client: Ошибка опроса XHR появляется при наличии отладчика
Вы хотите:
- [x] сообщить об ошибке
- [] запросить функцию
Текущее поведение
У меня возникли проблемы при попытке установить соединение с веб-сокетом на react-native. Я не уверен, поддерживается эта платформа или нет, однако эта ошибка воспроизводится в обычном приложении node.js. Как ни странно, у меня проблемы только тогда, когда встроенный отладчик response-native отключен . Я тестирую это на iOS 10.2 с react-native v0.43.1 и socket.io-client v1.7.3 . На моем сервере работает socket.io v1.7.2 размещенный на HTTP-порту 1337.
Действия по воспроизведению (если текущее поведение является ошибкой)
Как только я реализую socket.io-client в response-native и попытаюсь установить соединение без включенного отладчика, он должен воспроизвести с двумя ошибками в зависимости от параметров. Если я не укажу свой вариант транспорта, ошибка будет XHR: POLLING ERROR . Если я укажу «websocket» в моей опции транспорта, тогда ошибка станет WEBSOCKET ERROR . Это все, что я получил.
Ожидаемое поведение
Регулярное подключение к моему серверу через веб-сокет. Работает с включенным отладчиком.
Настраивать
- ОС: OSX El Capitan 10.11.6
- браузер: я считаю, что в response-native используется webkit, но я не уверен.
- версия socket.io: указана выше
Другая информация (например, трассировки стека, связанные проблемы, предложения по исправлению)
Единственная другая проблема, связанная с этой, которую я обнаружил, — это №1056, и я удивлен тем, насколько странно связаны эти проблемы. Я повторил сценарий в обычном приложении node.js и испытал аналогичные результаты, однако ошибки были более подробно описаны, как показано ниже.
Без указанной опции транспорта:
С transports: [‘websocket’] :
Также имейте в виду, что браузер-клиент socket.io работает безупречно, подключаясь к этому конкретному веб-серверу.
Я пробовал разные сети, провайдеры и даже VPN. Я не понимаю на данный момент.
Источник
Использование Socket.IO на Android всегда возвращает ошибку опроса XHR
Я пишу приложение для Android, которому необходимо подключиться к экземпляру Socket.IO, запущенному на сервере node.js.
Попытка подключиться к экземпляру и передать данные с помощью устройства iOS работает безупречно, но когда я пытаюсь сделать это с помощью устройства Android, это не удается.
Я использую собственный Java-клиент , и это код, который я использую на стороне Android:
Всякий раз, когда я пытаюсь подключиться (в основном, как только строка mSocket.connect(); ), журнал печатает следующие строки:
Поэтому я сразу получаю ошибку опроса xhr после попытки подключения, и все последующие попытки подключения дают тот же результат.
Я видел несколько сообщений, в которых говорилось, что такая проблема может быть вызвана проблемой с сертификатом SSL, хотя любые попытки, которые я предпринял, чтобы смягчить SSL-контекст, который использует библиотека Socket.IO, не сработали.
Если у кого-нибудь есть идея, что я могу попробовать, чтобы это работало, было бы отлично.
Если какая-либо информация или образцы кода отсутствуют, дайте мне знать, и я добавлю их.
После дальнейшего тестирования я обнаружил следующее:
- Если вы отлаживаете свой сокет, когда вы сталкиваетесь с различными событиями (например, EVENT_ERROR), исключение, которое вы перехватываете, будет содержать код ответа, полученный с адреса, который вы пытались достичь.
- В моем случае при попытке доступа к моему серверу с помощью HTTP я получил код ответа 301, потому что URL-адрес, который я пытался достичь, автоматически перенаправлял меня на адрес HTTPS.
- При попытке достичь адреса HTTPS я получил код ответа 401 — это означает, что запрос, сделанный моим сокетом, достиг сервера, но не был авторизован — Причина этого заключалась в том, что на целевом сервере была включена базовая аутентификация, и я не предоставил необходимые учетные данные в заголовках запроса сокета.
- После предоставления необходимых заголовков мне удалось правильно подключиться к серверу сокетов, но при отправке запроса он не удался, и мой сокет вернулся в цикл попытки повторного подключения. Причина в том, что JSON, который я отправил на сервер из формат моего телефона Android не соответствовал ожидаемому, и серверу не удалось получить этот запрос.
Код, который я использовал для добавления заголовка базовой аутентификации к моему запросу сокета:
Если вы столкнулись с ошибкой опроса XHR при попытке использовать Socket.IO, убедитесь, что соединение с вашим сервером сокетов доступно и что вы подключаетесь правильно. В конце концов, в моем случае все вращалось вокруг сервера, требующего базовой аутентификации, и я не предоставлял ее при обращении к серверу.
Кроме того , поскольку я столкнулся с этим решением немного, пытаясь решить эту проблему — при попытке связаться с вашим сервером через HTTPS вам обычно не нужен специальный верификатор имени хоста или специальный диспетчер сертификатов. Старайтесь избегать таких решений, поскольку они сильно вредит безопасности вашего приложения.
Источник
Socket.io-client: Ошибка опроса XHR появляется при наличии отладчика
Вы хотите:
- [x] сообщить об ошибке
- [] запросить функцию
Текущее поведение
У меня возникли проблемы при попытке установить соединение с веб-сокетом на react-native. Я не уверен, поддерживается эта платформа или нет, однако эта ошибка воспроизводится в обычном приложении node.js. Как ни странно, у меня проблемы только тогда, когда встроенный отладчик response-native отключен . Я тестирую это на iOS 10.2 с react-native v0.43.1 и socket.io-client v1.7.3 . На моем сервере работает socket.io v1.7.2 размещенный на HTTP-порту 1337.
Действия по воспроизведению (если текущее поведение является ошибкой)
Как только я реализую socket.io-client в response-native и попытаюсь установить соединение без включенного отладчика, он должен воспроизвести с двумя ошибками в зависимости от параметров. Если я не укажу свой вариант транспорта, ошибка будет XHR: POLLING ERROR . Если я укажу «websocket» в моей опции транспорта, тогда ошибка станет WEBSOCKET ERROR . Это все, что я получил.
Ожидаемое поведение
Регулярное подключение к моему серверу через веб-сокет. Работает с включенным отладчиком.
Настраивать
- ОС: OSX El Capitan 10.11.6
- браузер: я считаю, что в response-native используется webkit, но я не уверен.
- версия socket.io: указана выше
Другая информация (например, трассировки стека, связанные проблемы, предложения по исправлению)
Единственная другая проблема, связанная с этой, которую я обнаружил, — это №1056, и я удивлен тем, насколько странно связаны эти проблемы. Я повторил сценарий в обычном приложении node.js и испытал аналогичные результаты, однако ошибки были более подробно описаны, как показано ниже.
Без указанной опции транспорта:
С transports: [‘websocket’] :
Также имейте в виду, что браузер-клиент socket.io работает безупречно, подключаясь к этому конкретному веб-серверу.
Я пробовал разные сети, провайдеры и даже VPN. Я не понимаю на данный момент.
Источник
Вы хотите:
- [x] сообщить об ошибке
- [] запросить функцию
Текущее поведение
У меня возникли проблемы при попытке установить соединение с веб-сокетом на react-native. Я не уверен, поддерживается эта платформа или нет, однако эта ошибка воспроизводится в обычном приложении node.js. Как ни странно, у меня проблемы только тогда, когда встроенный отладчик response-native отключен . Я тестирую это на iOS 10.2 с react-native v0.43.1 и socket.io-client v1.7.3 . На моем сервере работает socket.io v1.7.2 размещенный на HTTP-порту 1337.
Действия по воспроизведению (если текущее поведение является ошибкой)
Как только я реализую socket.io-client в response-native и попытаюсь установить соединение без включенного отладчика, он должен воспроизвести с двумя ошибками в зависимости от параметров. Если я не укажу свой вариант транспорта, ошибка будет XHR: POLLING ERROR . Если я укажу «websocket» в моей опции транспорта, тогда ошибка станет WEBSOCKET ERROR . Это все, что я получил.
Ожидаемое поведение
Регулярное подключение к моему серверу через веб-сокет. Работает с включенным отладчиком.
Настраивать
- ОС: OSX El Capitan 10.11.6
- браузер: я считаю, что в response-native используется webkit, но я не уверен.
- версия socket.io: указана выше
Другая информация (например, трассировки стека, связанные проблемы, предложения по исправлению)
Единственная другая проблема, связанная с этой, которую я обнаружил, — это №1056, и я удивлен тем, насколько странно связаны эти проблемы. Я повторил сценарий в обычном приложении node.js и испытал аналогичные результаты, однако ошибки были более подробно описаны, как показано ниже.
Без указанной опции транспорта:
{ Error: xhr poll error
at XHR.Transport.onError (/path/to/root/node_modules/engine.io-client/lib/transport.js:64:13)
at Request.<anonymous> (/path/to/root/node_modules/engine.io-client/lib/transports/polling-xhr.js:129:10)
at Request.Emitter.emit (/path/to/root/node_modules/component-emitter/index.js:133:20)
at Request.onError (/path/to/root/node_modules/engine.io-client/lib/transports/polling-xhr.js:307:8)
at Timeout._onTimeout (/path/to/root/node_modules/engine.io-client/lib/transports/polling-xhr.js:254:18)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5) type: 'TransportError', description: 503 }
С transports: ['websocket'] :
{ Error: websocket error
at WS.Transport.onError (/path/to/root/node_modules/engine.io-client/lib/transport.js:64:13)
at WebSocket.ws.onerror (/path/to/root/node_modules/engine.io-client/lib/transports/websocket.js:149:10)
at WebSocket.onError (/path/to/root/node_modules/ws/lib/WebSocket.js:452:14)
at emitOne (events.js:96:13)
at WebSocket.emit (events.js:189:7)
at ClientRequest.onerror (/path/to/root/node_modules/ws/lib/WebSocket.js:711:10)
at emitOne (events.js:96:13)
at ClientRequest.emit (events.js:189:7)
at TLSSocket.socketErrorListener (_http_client.js:358:9)
at emitOne (events.js:96:13)
type: 'TransportError',
description:
{ Error: socket hang up
at TLSSocket.onHangUp (_tls_wrap.js:1117:19)
at Object.onceWrapper (events.js:291:19)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:186:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
code: 'ECONNRESET',
type: 'error',
target:
WebSocket {
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
_socket: null,
_ultron: null,
_closeReceived: false,
bytesReceived: 0,
readyState: 0,
supports: [Object],
extensions: {},
_binaryType: 'nodebuffer',
_isServer: false,
url: 'wss://SERVER_IP:1337/socket.io/?EIO=3&transport=websocket',
protocolVersion: 13 } } }
Также имейте в виду, что браузер-клиент socket.io работает безупречно, подключаясь к этому конкретному веб-серверу.
Я пробовал разные сети, провайдеры и даже VPN. Я не понимаю на данный момент.
Все 30 Комментарий
ОБНОВЛЕНИЕ : после окончательного тестирования одного из моих приложений на моем iPhone с помощью socket.io-client мне повезло, что я не столкнулся с ошибкой опроса XHR. Однако я все еще испытываю эту ошибку в обычном приложении узла.
В настоящее время у меня такая же проблема с моим приложением узла. Я использую встроенный сервер socket.io, и, похоже, он отлично работает в браузере, но в приложении узла socket.io-client выдает ту же ошибку опроса 503 xhr, указанную выше. Я запускаю сервер и клиент на одном компьютере, но подключение к петлевому или локальному сетевому адресу из клиентского приложения не работает. Я использую версию 1.7.3 как socket.io и socket.io-client .
Я также вижу эту ошибку в версии 2.0.1 (клиент и сервер) при запуске с узла.
Я решил свою проблему неделю назад путем рефакторинга, но не помню, что именно решило проблему. Извините за это, у меня была загруженная неделя, и это была первая фиксация.
Вы можете попробовать установить opts.transports только на websocket в клиенте:
io.connect(url, { transports: ['websocket'] }); // default is ['polling', 'websocket']
У меня была слишком сложная логика привязки сокетов и действий, прежде чем я реорганизовал код. Поэтому убедитесь, что логика сокета в вашем коде работает, и упростите отладку.
Я попробую наш транспорт. На данный момент я понизил версию до 1.7.4, и, похоже, все работает.
Да, я уменьшил версию с 2.0.1 до 1.7.4, исправил это
Итак, я вернулся к 2.0.1 и настроил свой клиент на использование только транспорта websocket. Это (почти) работает:
io(`localhost:8080`, {
transports: [ 'websocket' ],
upgrade: false
});
Теперь моя единственная проблема заключается в том, что транспорт веб-сокетов не работает для областей действия веб-воркеров. Я думаю, что обнаружил проблему и открыл соответствующую проблему на engine.io-client здесь https://github.com/socketio/engine.io-client/issues/569
@darrachequesne Итак, я только что вернулся к транспорту по умолчанию в клиентском компоненте на стороне сервера. Моя ошибка там … Транспорт для голосования определенно у меня работает. Проблема, с которой я столкнулся, заключалась в моих самоподписанных сертификатах ssl для местного разработчика. Мне пришлось добавить rejectUnauthorized: process.env.NODE_ENV === 'production' в конфигурацию socket.io, чтобы он заработал. В противном случае я получал 503 .
Однако проблема веб-воркеров реальна. socketio / engine.io-client # 569
попробуй это
require('socket.io-client')('http://localhost', {
rejectUnauthorized: false,
})
Спасибо попробую
—— Исходное сообщение ——
От: Zetsin [email protected]
Получатель: «socketio / socket.io-client» [email protected]
Копия: Wangzhiqiang [email protected] , комментарий [email protected]
Тема: Re: [socketio / socket.io-client] Ошибка опроса XHR появляется при наличии отладчика (# 1097)
Дата: 16:22, 20 мая 2017 г.
попробуй это
require (‘socket.io-client’) (‘http: // localhost’, {
rejectUnauthorized: ложь,
})
—
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.
У меня такая же проблема. Затем я меняю свой клиентский код на
require('socket.io-client')('wss://myserver:port/ws', { transports: ['websocket'], rejectUnauthorized: false });
Но теперь я получаю ответ об ошибке 404. Журнал показывает, что к моему URL-адресу запроса добавлен дополнительный /socket.io/ .
{ Error: unexpected server response (404)
at ClientRequest._req.on (/Users/chris/Projects/nationsky/mgmt-server/backend/node_modules/ws/lib/WebSocket.js:650:26)
at emitOne (events.js:115:13)
at ClientRequest.emit (events.js:210:7)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:564:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:116:23)
at TLSSocket.socketOnData (_http_client.js:453:20)
at emitOne (events.js:115:13)
at TLSSocket.emit (events.js:210:7)
at addChunk (_stream_readable.js:252:12)
at readableAddChunk (_stream_readable.js:239:11)
type: 'error',
target:
WebSocket {
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
readyState: 0,
bytesReceived: 0,
extensions: {},
protocol: '',
_binaryType: 'arraybuffer',
_finalize: [Function: bound finalize],
_finalizeCalled: false,
_closeMessage: null,
_closeTimer: null,
_closeCode: null,
_receiver: null,
_sender: null,
_socket: null,
_ultron: null,
protocolVersion: 13,
_isServer: false,
url: 'wss://myserver:port/socket.io/?access_token=HnbtDUEWu1i1HVrAn-DO9YOL6GZxoittWAf8Sz_RR0s&EIO=3&transport=websocket',
_req: [Object] } } }
Для меня это появляется, даже если отладчика нет
Привет! У меня была такая же проблема, когда я пытался подключиться из приложения Node.js к серверу, вот мой код:
const socket = require('socket.io-client')('https://domain.com')
Журнал, который я получил при запуске DEBUG=engine* npm run dev был примерно таким:
engine.io-client:socket creating transport "polling" +2s
engine.io-client:polling polling +1ms
engine.io-client:polling-xhr xhr poll +0ms
engine.io-client:polling-xhr xhr open GET: https://domain.com/socket.io/?EIO=3&transport=polling&t=LzBM71r&b64=1 +0ms
engine.io-client:polling-xhr xhr data null +0ms
engine.io-client:socket setting transport polling +1ms
engine.io-client:socket socket error {"type":"TransportError","description":503} +7ms
engine.io-client:socket socket close with reason: "transport error" +0ms
engine.io-client:polling transport not open - deferring close +0ms
Когда я попытался подключиться из браузера к https://domain.com/socket.io/socket.io.js это сработало, и я тоже использовал io('https://domain.com') , поэтому я выполнил инструкции в комментариях и изменил свой код на:
const socket = require('socket.io-client')('https://domain.com', { rejectUnauthorized: false })
И это сработало, но это странно, у меня есть действующие сертификаты от Let’s Encrypt , или это нормально? в любом случае … я добавил параметр transports (тоже из комментариев), чтобы избежать других подключений, кроме websocket и в конце код был:
const socket = require('socket.io-client')('https://domain.com', {
transports: ['websocket'],
rejectUnauthorized: false
})
Спасибо @ibrahimduran и @SupremeTechnopriest : smile:
Приношу свои извинения, если я писал как Тарзан: sweat_smile: я работаю над своим английским, ха-ха
У меня была эта проблема, и я потратил на это 2 часа, оказалось, что это просто правильное указание ваших параметров. Вот как их следует указать:
let socketClient = socketIOClient.connect(`http://localhost:3001`,{ // [1] Important as fuck
reconnectionDelay: 1000,
reconnection:true,
reconnectionAttempts: 10,
transports: ['websocket'],
agent: false, // [2] Please don't set this to true
upgrade: false,
rejectUnauthorized: false
});
[1] Если вы не укажете, использовать http или https, по умолчанию будет https. Или, если вы не указываете порт сразу после URL-адреса как «url. Com: port », по умолчанию используется значение 80 или 443 в зависимости от протокола. Я видел несколько ответов stackoverflow, в которых порт указан в качестве параметра в объекте параметров. Я заглянул в код, но такой возможности нет. Вам необходимо указать порт в URL-адресе.
[2] Кроме того, я установил для агента значение true, и ему не удалось установить соединение ws, и ошибки не было, просто истекло время ожидания. Только не указывайте агента вообще. По умолчанию — false.
@ teja42 Я 2 дня пытался исправить эту проблему. Я думал, что это проблема с пакетом webpack, но ваше решение отлично сработало. Спасибо!
Привет !
У меня была та же проблема, и я исправил понижение с 2.0.1 до 1.7.4, как сказал @SupremeTechnopriest, и все работает нормально!
Благодарность !
Привет, у меня все еще проблема с Android 8.1 
Псевдокод:
« »
this.socket = io.connect (‘https: // xxxxxxxxxxxxxx’, {
путь: ‘/ socketchannel’,
RenectionDelay: 1000,
переподключение: правда,
переподключениеПопыток: 10,
транспорты: [‘websocket’],
агент: ложь,
обновление: ложь,
rejectUnauthorized: false
});
this.socket.on (‘подключиться’, () => {
console.log (‘сокет подключен!’)
})
this.socket.on (‘connect_error’, (err) => {
console.log (‘ошибка подключения сокета ->’ + err);
})
« »
Приложение переходит в событие ‘connection_error’ и регистрирует «Ошибка: ошибка веб-сокета».
«react-native»: «0.57.4»,
«socket.io-client»: «1.7.4»
Какие-либо предложения?
Приложение переходит в событие ‘connection_error’ и регистрирует «Ошибка: ошибка веб-сокета».
Столкнувшись с той же проблемой
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
"engine.io-client": "~3.3.2",
"socket.io-client": "2.1.1",
Я столкнулся с той же проблемой, есть ли обновления?
У меня была эта проблема из-за origins сервера сокетов.
Итак, как добавить происхождение?
Всем привет. Итак, я использую кластер PM2 для своего экспресс-сервера node и использую адаптер redis:
const redis = require('socket.io-redis')
io.adapter(redis(config.redis))
Для браузерных клиентов это нормально, но для socket.io-client я получаю:
{ Error: xhr post error
at XHR.Transport.onError (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transport.js:67:13)
at Request.<anonymous> (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transports/polling-xhr.js:111:10)
at Request.Emitter.emit (/home/user/Desktop/nodeclienttest/node_modules/component-emitter/index.js:133:20)
at Request.onError (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transports/polling-xhr.js:311:8)
at Timeout._onTimeout (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transports/polling-xhr.js:258:18)
at listOnTimeout (timers.js:327:15)
at processTimers (timers.js:271:5) type: 'TransportError', description: 400 }
{ Error: xhr poll error
at XHR.Transport.onError (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transport.js:67:13)
at Request.<anonymous> (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transports/polling-xhr.js:130:10)
at Request.Emitter.emit (/home/user/Desktop/nodeclienttest/node_modules/component-emitter/index.js:133:20)
at Request.onError (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transports/polling-xhr.js:311:8)
at Timeout._onTimeout (/home/user/Desktop/nodeclienttest/node_modules/engine.io-client/lib/transports/polling-xhr.js:258:18)
at listOnTimeout (timers.js:327:15)
at processTimers (timers.js:271:5) type: 'TransportError', description: 400 }
Если я изменю клиентский код для использования транспорта через веб-сокеты, все будет работать нормально.
var socket = require("socket.io-client")("http://localhost:8080", { transports: ['websocket'] });
Проблема в том, что я не хочу требовать изменения этого кода для всего клиентского кода.
Я рекомендую изменить socket.io-client, чтобы попытаться использовать транспорт websocket, если транспорт опроса xhr не работает. Что вы думаете?
попробуйте последнюю версию с github, вот так, решила мои проблемы с RN android:
npm i socketio/engine.io-client#3.3.2 -S
Ваше здоровье
Я знаю, что это решение будет звучать немного странно, но я попал сюда, погуглил эту ошибку.
В моем случае я получал это, потому что мой сервер не работал (я думал, что это так). Надеюсь, что это поможет кому-то другому 
попробуй это
require('socket.io-client')('http://localhost', { rejectUnauthorized: false, })
Спасибо, у меня возникли проблемы с подключением к моему серверу из приложения узла, и это решение сработало для меня.
попробуй это
require('socket.io-client')('http://localhost', { rejectUnauthorized: false, })Спасибо, у меня возникли проблемы с подключением к моему серверу из приложения узла, и это решение сработало для меня.
Здравствуйте, мне просто интересно, какую версию socket.io и socket.io-client вы используете
попробуй это
require('socket.io-client')('http://localhost', { rejectUnauthorized: false, })Спасибо, у меня возникли проблемы с подключением к моему серверу из приложения узла, и это решение сработало для меня.
Здравствуйте, мне просто интересно, какую версию socket.io и socket.io-client вы используете
Я использую и socket.io, и socket.io-client версии 2.3.0.
Привет, у меня все еще проблема с Android 8.1
![]()
Псевдокод:
this.socket = io.connect('https://xxxxxxxxxxxxxx', { path: '/socketchannel', reconnectionDelay: 1000, reconnection:true, reconnectionAttempts: 10, transports: ['websocket'], agent: false, upgrade: false, rejectUnauthorized: false }); this.socket.on('connect', () => { console.log('socket connected!') }) this.socket.on('connect_error', (err) => { console.log('socket connected error --> ' + err); })Приложение переходит в событие ‘connection_error’ и регистрирует «Ошибка: ошибка веб-сокета».
«react-native»: «0.57.4»,
«socket.io-client»: «1.7.4»Какие-либо предложения?
Та же проблема. Вы ее решаете?
Я решаю свою проблему, используя доменное имя.
Была ли эта страница полезной?
0 / 5 — 0 рейтинги
#android #node.js #kotlin #socket.io
Вопрос:
Я получаю сообщение об ошибке, просто пытаясь установить начальное соединение между клиентом Android и моим локальным сервером сокетов, работающим Node.js но продолжайте получать эту ошибку опроса xhr, я пытался решить эту проблему в течение последних нескольких часов, но не очень удачно, любая помощь будет признательна. Я добавил правильные настройки в манифест, а также убедился, что использую частный IP-адрес сервера (локальной машины), я могу просматривать / подключаться к этому порту, я пробовал это как на эмуляторе, так и на физическом устройстве, но получил ту же ошибку.
Подключение Клиента
@Synchronized
fun setSocket() {
try {
Log.d("socketHandler", "setting Socket" )
mSocket = IO.socket("http://192.168.1.156:3000")
mSocket.on(Socket.EVENT_CONNECT_ERROR){
Log.d("SocketHandler" ,"Connection Error : ${it}")
it.forEach { item ->
val exception = item as EngineIOException
print(exception.message " " exception.code " " exception.cause)
}
}
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT){
Log.d("SocketHandler", "TimeOut Error : $it")
}
establishConnection()
} catch (e: Exception) {
when(e){
is URISyntaxException -> e.printStackTrace()
is EngineIOException -> {
Log.d("EngineException", "${e.code}, ${e.transport}, ${e.message}")
e.printStackTrace()
}
else -> e.printStackTrace()
}
}
}
Главный фестиваль
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.AirHockeyCompose">
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.AirHockeyCompose.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Сервер
const { Server } = require("socket.io");
const io = new Server({ /* options */ });
io.on("connection", (socket) => {
console.log("connection")
console.log(socket)
});
io.listen(3000);
Ошибка (это получено в сокете.EVENT_CONNECT_ERROR)
xhr poll error null java.io.IOException: 400io.socket.engineio.client.EngineIOException: xhr poll error
Ответ №1:
Я не эксперт в этом, но я сделал это некоторое время назад в задании. У меня был сервер nodejs, содержащий несколько изображений, и Android, который подключается к нему через сокет для их отображения.
Соединение шло нормально, у меня не было ошибок, и вы можете проверить их здесь, если это вам все равно поможет https://github.com/aliosman21/Minly-Task .
Что касается ваших приведенных фрагментов, единственное, что я заметил, это то, что IP-адрес сервера на эмуляторах должен быть 10.0.2.2 (если память не изменяет), но поскольку вы уже пробовали это на физическом устройстве, я не уверен.
Я полагаю, что мы оба использовали одну и ту же клиентскую библиотеку https://socketio.github.io/socket.io-client-java/initialization.html
Еще одна вещь, в которой следует убедиться, это то, что если вы используете самозаверяющий сертификат на сервере, вам необходимо {rejectUnauthorized: false} указать параметры
Вопрос:
Я написал очень простую демонстрацию о socket.io. Я упакую ее, используя телефонную записями. Я обнаружил, что есть проблема. После того, как я открою свое приложение около десяти секунд, соединение отключится из-за ошибки xhr poll. Если я обновляю страницу в отключенном случае, ошибка не появится снова.
Я использую версию 1.2.0. Здесь мой код. Я уже упрощаю это.
Сервер:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
io.sockets.on('connection', function (socket) {
console.log("disconnect--"+socket.id+"--"+io.sockets.server.eio.clientsCount);
socket.on('disconnect', function () {
console.log("disconnect--"+io.sockets.server.eio.clientsCount);
});
});
http.listen(80, function () {
console.log("server statrt");
});
клиент:
$(document).ready(function () {
var socket = io("http://192.168.0.106:80");
socket.on('connect', function () {
alert("connect");
});
socket.on('error', function (data) {
alert(data);
});
socket.on('disconnect', function () {
alert("disconnect");
});
socket.on("reconnect", function () {
alert("reconnect");
})
});
спасибо за помощь .my English не очень хорошо
Ответ №1
Вам нужно открыть соединение socket.io при запуске события deviceready.
document.addEventListener('deviceready', function() {
var socket = io("http://192.168.0.106:80");
socket.on('connect', function() {
alert("connect");
});
socket.on('error', function (data) {
alert(data);
});
socket.on('disconnect', function () {
alert("disconnect");
});
socket.on("reconnect", function () {
alert("reconnect");
});
});
Пример Socket.io
Ответ №2
Для тех, кто использует Google Chrome, FYI Chrome не запускает 'deviceready'. Вместо этого вы должны использовать 'DOMContentLoaded'.
Hi i’m using Homestead with a laravel application.
I can’t get the client to receive the data on from the server…
My socket.js:
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('test-channel');
redis.on('message', function (channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
/*Booting Up the Server : port 3000 */
server.listen(3000 , function(){
console.log('The Server Is Running');
});
This is listening to port 3000 which is working.
Console output:
vagrant@homestead:~/code/chatting-app$ nodemon -L socket.js
[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node socket.js`
The Server Is Running
On the client side i’m also listening to port 3000.
i use a piece of code to display the error:
function checkSocketIoConnect(url, timeout) {
return new Promise(function(resolve, reject) {
var errAlready = false;
timeout = timeout || 5000;
var socket = io(url, {reconnection: false, timeout: timeout});
// success
socket.on("connect", function() {
clearTimeout(timer);
resolve();
socket.close();
});
// set our own timeout in case the socket ends some other way than what we are listening for
var timer = setTimeout(function() {
timer = null;
error("local timeout");
}, timeout);
// common error handler
function error(data) {
if (timer) {
clearTimeout(timer);
timer = null;
}
if (!errAlready) {
errAlready = true;
reject(data);
socket.disconnect();
}
}
// errors
socket.on("connect_error", error);
socket.on("connect_timeout", error);
socket.on("error", error);
socket.on("disconnect", error);
});
}
checkSocketIoConnect("http://192.168.10.10:3000").then(function() {
console.log('succes');
}, function(reason) {
console.log(reason);
});
But this displays the following error:
Error: xhr poll error
Stacktrace:
[14]</n.prototype.onError@https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.7/socket.io.min.js:1:24221
[17]</</o.prototype.doPoll/<@https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.7/socket.io.min.js:1:29697
[9]</n.prototype.emit@https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.7/socket.io.min.js:1:13388
[17]</</i.prototype.onError@https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.7/socket.io.min.js:1:31004
i don’t know what to do?! I tried everything i can think of.
My homestead.Yaml file:
Any help is appreciated…


