Socket.io-client: a versão 2.2 não funciona com o react nativo

Criado em 21 dez. 2018  ·  32Comentários  ·  Fonte: socketio/socket.io-client

Reverter para 2.1.1 corrige o problema.

Suspeito que tenha algo a ver com as novas mudanças na gestão do cors.
Definir manualmente as origens não parece fazer nada.

Ele começa a funcionar magicamente ao iniciar o depurador nativo react.

Config

reconnection: true,
reconnectionDelay: 500,
jsonp: false,
reconnectionAttempts: Infinity,
transports: ['websocket']

Configurar

  • SO: iOS
  • navegador: react-nativo
  • versão socket.io: 2.2.0

Comentários muito úteis

Nada parece funcionar com o react nativo 0,60

Todos 32 comentários

teve o mesmo problema em ambas as plataformas (simulador) 2.1.1, ele só funciona com a ativação do depurador.

Eu também estou enfrentando esse problema. Eu atualizei para ver se isso corrige meu primeiro problema de latência de conexão.

Eu também estou enfrentando o mesmo. edição

Reverter para 2.1.1 funciona para mim.

Eu ainda estou enfrentando o mesmo problema de reverter 2.1.1 também não está funcionando para mim.

Deve ser corrigido em https://github.com/socketio/engine.io-client/pull/607.

@benhjames você poderia confirmar que sua correção corrigiu o problema no React Native?

Sim, atualmente estou executando [email protected] (que puxou [email protected] ) no React Native sem problemas.

Vale a pena verificar se seu engine.io-client é 3.3.2, pois contém a correção React Native para websockets. 😃

@benhjames @darrachequesne eu usei socket. [email protected] (que puxou [email protected]) e também verificar as mudanças em node_modules ainda, não está funcionando para mim.

`importar io de 'socket.io-client';

exportar a classe padrão HomeScreen extends React.Component {
construtor (adereços) {
super (adereços);
this.socket = io ('ws: //192.168.0.107: 8080 / endpoint', {
reconexão: verdadeiro,
reconnectionDelay: 500,
jsonp: false,
tentativas de reconexão: Infinity,
transportes: ['websocket']
});
this.socket.on ('connect_error', (err) => {
console.log (err)
});
}
`

Estou recebendo o erro abaixo:
Error: websocket error at WS.Transport.onError (transport.js:67) at WebSocket.ws.onerror (websocket.js:157) at WebSocket.dispatchEvent (event-target.js:172) at WebSocket.js:289 at RCTDeviceEventEmitter.emit (EventEmitter.js:190) at MessageQueue.__callFunction (MessageQueue.js:349) at MessageQueue.js:106 at MessageQueue.__guard (MessageQueue.js:297) at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:105) at debuggerWorker.js:72

Isso me parece que o ponto de extremidade está incorreto - deve ser um link de protocolo http ou https , não ws one. 👍

@benhjames Eu tentei anteriormente com a API WebSocket https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API e estava funcionando perfeitamente bem com o mesmo protocolo.

socket.io (ao contrário da API WebSocket) só aceita um URI de protocolo HTTP (S) para o cliente ( consulte a documentação aqui ), mas _utiliza_ o protocolo WS nos bastidores.

Portanto, se você fizer io('http://192.168.0.107:8080/endpoint', ...) , deve funcionar!

@benhjames, obrigado pela atualização!

Acho que ws:// deve funcionar corretamente, mas /endpoint significa que você deseja se conectar ao namespace do endpoint (que é a implementação atual, a partir de v2.x). Você pode querer usar:

this.socket = io('ws://192.168.0.107:8080', {
  path: '/endpoint',
  reconnection: true,
  reconnectionDelay: 500,
  jsonp: false,
  reconnectionAttempts: Infinity,
  transports: ['websocket']
});

@darrachequesne Eu tentei a implementação acima, mas ainda não está funcionando.

Talvez seja útil ver a aparência do código do servidor SocketIO, apenas para ter certeza de que está usando o namespace e as configurações corretas, etc. 🙂

Está funcionando perfeitamente bem com a API WebSocket, mas quando tento me conectar com a API Socket.io, recebo um erro como abaixo:

websocket error

Stack trace:
  null:null in WS.Transport.onError
  node_modules/engine.io-client/lib/transports/websocket.js:178:8 in WebSocket.ws.onerror
  node_modules/event-target-shim/lib/event-target.js:172:38 in WebSocket.dispatchEvent
  node_modules/react-native/Libraries/WebSocket/WebSocket.js:289:13 in <unknown>
  node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:190:32 in RCTDeviceEventEmitter.emit
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:349:41 in MessageQueue.__callFunction
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:106:11 in <unknown>
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:297:8 in MessageQueue.__guard
  node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:105:9 in MessageQueue.callFunctionReturnFlushedQueue
  http://192.168.0.103:19001/debugger-ui/debuggerWorker.js:72:58 in <unknown>

Se funcionar com a API WebSocket sem lógica personalizada para desserializar cargas úteis de socket.io, isso significa que o servidor não está usando socket.io.

Existe alguma chance de você fornecer algum código do servidor para verificar se é esse o caso?

@benhjames Isso mesmo, estamos usando https://docs.oracle.com/javaee/7/api/javax/websocket/package-summary.html para código de back-end.

Isso explica tudo então! O Socket.io precisa ser usado _both_ no cliente e no servidor para funcionar. 👍

@benhjames @darrachequesne Agora estou usando socket.io no backend, está funcionando bem no frontend com vanilla javascript usando socket.io, mas quando tento conectar socket.io através do React Native estou recebendo o erro:

Vanilla JS (funcionando perfeitamente bem):

`` `

Por favor, veja a resposta acima!

Obrigado, @benhjames pelo seu apoio, está funcionando agora. https://github.com/mrniko/netty-socketio/issues/614

Eu tenho o mesmo problema, não importa se escolhi websockets ou polling. É um websocket_error ou um erro de votação xhr.

O URL é um IP (http://192.168.1.112:3000) e estou me conectando de um telefone físico a um computador na mesma rede local usando React Native Expo.

Posso ajudar se você precisar de mais rastreamentos de pilha ou informações ...

socket.io 2.2.0 // cliente e servidor
engine.io 3.3.2 // cliente e servidor

Soa como um problema fora do socket.io, se o websocket e o polling transport não estiverem funcionando. Você pode querer tentar:

  • Conectando-se ao servidor socket.io fora do React Native, usando o cliente socket.io em um navegador. Se isso também não funcionar, é provável que haja um problema com o servidor.
  • Fazendo uma solicitação normal de fetch ao seu servidor. Se isso não funcionar, é provável que haja um problema com a rede ou com o ambiente React Native.

Vou tentar o primeiro teste, a busca normal funciona

EDIT: parece um problema relacionado ao CORS. Se tento conectar um cliente JS simples, obtenho:

Access to XMLHttpRequest at 'http://192.168.1.112:3000/socket.io/?EIO=3&transport=polling&t=MfV8vhI' from origin 'http://192.168.1.112:5000' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

Algum conselho sobre como configurar isso?

tentar a última versão do github, assim, resolveu meus problemas com RN android:

npm i socketio/engine.io-client#3.3.2 -S

Nada parece funcionar com o react nativo 0,60

A versão de versão do Android não funciona ao usar RN 0.60.5

Tentei versões do socket.io-client 2.0.4, 2.1.1, 2.2.0.

Tentei yarn add socketio/engine.io-client#3.3.2

Consulte # 1305 - no Android, você precisa usar https ou definir o atributo usesCleartextTraffic em AndroidManifest

tente v2.3

Eu tentei com o Expo SDK v34 e v35 (RN 0,59) e tive que fazer o downgrade do socket.io-client para 1.7.2 ( yarn add [email protected] ) como outras versões (2.1.1, 2.1.0, 2.2.0) fizeram Não funciona. Não tentei 2.3.0, agora que funciona, não quero problemas :-)

Olá @lionbur , como eu sei, existem muitos mini-versão de 0,59. Qual versão você está usando? 0,59,9?

Agradeço antecipadamente!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

patrickbussmann picture patrickbussmann  ·  6Comentários

gtk2k picture gtk2k  ·  3Comentários

Warrior-hound picture Warrior-hound  ·  5Comentários

vadimka123 picture vadimka123  ·  6Comentários

zappfinger picture zappfinger  ·  5Comentários