Socket.io-client: versi 2.2 tidak berfungsi dengan reaksi asli

Dibuat pada 21 Des 2018  ·  32Komentar  ·  Sumber: socketio/socket.io-client

Kembali ke 2.1.1 memperbaiki masalah.

Saya menduga itu ada hubungannya dengan perubahan manajemen kor yang baru.
Pengaturan asal secara manual sepertinya tidak melakukan apa-apa.

Ini secara ajaib mulai bekerja ketika meluncurkan debugger asli reaksi.

konfigurasi

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

Mempersiapkan

  • OS: iOS
  • browser: reaksi-asli
  • versi socket.io: 2.2.0

Komentar yang paling membantu

Sepertinya tidak ada yang bekerja dengan reaksi asli 0.60

Semua 32 komentar

mengalami masalah yang sama pada kedua platform (simulator) 2.1.1, ini hanya berfungsi dengan mengaktifkan debugger.

Saya juga menghadapi masalah ini. Saya memutakhirkan untuk melihat apakah itu memperbaiki masalah latensi koneksi pertama saya.

Saya juga menghadapi hal yang sama. isu

Kembali ke 2.1.1 berfungsi untuk saya.

Saya masih menghadapi masalah yang sama saat mengembalikan 2.1.1 juga tidak berfungsi untuk saya.

Itu harus diperbaiki oleh https://github.com/socketio/engine.io-client/pull/607.

@benhjames, bisakah Anda mengonfirmasi bahwa perbaikan Anda telah memperbaiki masalah di React Native?

Ya, saya saat ini menjalankan [email protected] (yang telah menarik [email protected] ) di React Native tanpa masalah.

Sebaiknya periksa untuk memastikan engine.io-client adalah 3.3.2, karena ini berisi perbaikan React Native untuk soket web. 😃

@benhjames @darrachequesne Saya telah menggunakan socket. [email protected] (yang telah menarik [email protected]) dan juga memverifikasi perubahan pada node_modules, itu tidak berfungsi untuk saya.

`impor io dari 'socket.io-client';

ekspor kelas default HomeScreen meluas React.Component {
konstruktor(alat peraga){
super(alat peraga);
this.socket = io('ws://192.168.0.107:8080/endpoint',{
rekoneksi: benar,
rekoneksiDelay: 500,
jsonp: salah,
upaya penyambungan kembali: Tak terhingga,
transportasi: ['websocket']
});
this.socket.on('connect_error', (err) => {
console.log(err)
});
}
`

Saya mendapatkan kesalahan seperti di bawah ini:
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

Bagi saya sepertinya titik akhir salah - itu seharusnya tautan protokol http atau https , bukan ws . 👍

@benhjames Saya sebelumnya mencoba dengan WebSocket API https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API dan itu berfungsi dengan baik dengan protokol yang sama.

socket.io (tidak seperti WebSocket API) hanya menerima URI protokol HTTP(S) untuk klien ( lihat dokumen di sini ), tetapi ia _menggunakan_ protokol WS di belakang layar.

Jadi jika Anda melakukan io('http://192.168.0.107:8080/endpoint', ...) itu akan berhasil!

@benhjames terima kasih atas pembaruannya!

Saya pikir ws:// harus berfungsi dengan baik, tetapi /endpoint berarti Anda ingin terhubung ke namespace titik akhir (itulah implementasi saat ini, pada v2.x). Anda mungkin ingin menggunakan:

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

@darrachequesne Saya sudah mencoba implementasi di atas tetapi masih tidak berhasil.

Mungkin berguna melihat seperti apa kode server SocketIO, hanya untuk memastikan itu menggunakan namespace dan pengaturan yang tepat, dll.

Ini berfungsi dengan baik dengan WebSocket API tetapi ketika saya mencoba terhubung dengan Socket.io API saya mendapatkan kesalahan seperti di bawah ini:

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>

Jika bekerja dengan WebSocket API tanpa logika khusus untuk membatalkan serial payload socket.io, maka itu menyiratkan bahwa server tidak menggunakan socket.io.

Apakah ada kemungkinan Anda dapat memberikan beberapa kode dari server untuk memverifikasi jika ini masalahnya?

@benhjames Itu benar kami menggunakan https://docs.Oracle.com/javaee/7/api/javax/websocket/package-summary.html untuk kode backend.

Itu menjelaskannya kalau begitu! Socket.io perlu digunakan pada _keduanya_ klien dan server agar berfungsi. 👍

@benhjames @darrachequesne Sekarang saya menggunakan socket.io di backend, itu berfungsi dengan baik di frontend dengan vanilla javascript menggunakan socket.io tetapi ketika saya mencoba menghubungkan socket.io melalui React Native saya mendapatkan kesalahan:

Vanilla JS (Bekerja dengan sangat baik):

```

Silakan lihat jawaban di atas!

Terima kasih, @benhjames atas dukungan Anda, Ini berfungsi sekarang. https://github.com/mrniko/netty-socketio/issues/614

Saya memiliki masalah yang sama tidak peduli apakah saya memilih soket web atau polling. Baik itu kesalahan websocket_error atau kesalahan polling xhr.

URL adalah IP (http://192.168.1.112:3000) dan saya menghubungkan dari telepon fisik ke komputer di jaringan lokal yang sama menggunakan React Native Expo.

Saya dapat membantu jika Anda membutuhkan lebih banyak jejak tumpukan atau info ...

socket.io 2.2.0 // klien dan server
engine.io 3.3.2 // klien dan server

Kedengarannya seperti masalah di luar socket.io, jika websocket dan transportasi polling tidak berfungsi. Anda mungkin ingin mencoba:

  • Menghubungkan ke server socket.io di luar React Native, menggunakan klien socket.io di browser. Jika itu juga tidak berhasil, kemungkinan ada masalah dengan server.
  • Membuat permintaan fetch normal ke server Anda. Jika itu tidak berhasil, kemungkinan ada masalah dengan jaringan atau lingkungan React Native.

Akan mencoba tes pertama, pengambilan normal berfungsi

EDIT: sepertinya masalah terkait CORS. Jika saya mencoba menghubungkan klien JS sederhana, saya mendapatkan:

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.

Adakah saran tentang cara mengatur ini?

coba versi terakhir dari github, seperti ini, selesaikan masalah saya dengan RN Android:

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

Sepertinya tidak ada yang bekerja dengan reaksi asli 0.60

Versi rilis Android tidak berfungsi saat menggunakan RN 0.60.5

Mencoba socket.io-client versi 2.0.4, 2.1.1, 2.2.0.

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

Lihat #1305 - di Android Anda perlu menggunakan https atau menyetel atribut usingCleartextTraffic di AndroidManifest

coba v2.3

Saya mencoba dengan Expo SDK v34 dan v35 (RN 0.59) dan harus menurunkan socket.io-client ke 1.7.2 ( yarn add [email protected] ) seperti yang dilakukan versi lain (2.1.1, 2.1.0, 2.2.0) Tidak bekerja. Saya tidak mencoba 2.3.0, sekarang berfungsi, saya tidak ingin ada masalah :-)

Hai @lionbur , seperti yang saya tahu ada banyak versi mini 0.59. Versi mana yang Anda gunakan? 0.59.9?

Terima kasih sebelumnya!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat