Saya telah menyiapkan socket.io v.1.4.5 w express dan saya tidak dapat melacak alasan pemutusan yang tidak dapat dijelaskan pada klien. Alasan yang diberikan oleh peristiwa disconnect pada klien adalah "transport close." Itu terjadi sangat konsisten pada beberapa klien.
Apakah ada penjelasan untuk klien yang "transport close" terputus pada apa yang tampaknya merupakan interval waktunya? Klien menyambung kembali dengan baik tetapi menyebabkan ketidaknyamanan yang luar biasa karena sering terjadi.
Saya sudah mencoba berbagai pengaturan, seperti mengubah pingInterval, pingTimeout dan port untuk soket web (sekarang saya menggunakan port 80). Tapi tidak peduli apa yang tampaknya saya lakukan, masalahnya tidak pernah hilang.
Diperbarui ke socket.io v2.0.3. dan masih mengalami masalah. Sepertinya hanya terjadi di salah satu PC saya. Saya juga menonaktifkan firewall windows, tetapi masalahnya masih terjadi.
Beralih ke ws ( https://github.com/websockets/ws ) yang melibatkan penulisan ulang besar-besaran, tetapi sekarang saya menggunakan objek browser websocket asli di sisi klien dan semuanya berfungsi dengan baik. Saya tidak lagi memiliki masalah. soket.io begitu lama!
Mengalami hal yang sama. Saya benar-benar tidak ingin harus melalui penulisan ulang. Adakah yang berhasil dengan masalah ini?
Aku benar-benar lelah dengan masalah ini.
Saya pikir kalian harus memeriksa versi "socket.io" dengan "socket.io-client".
jika versi server / klien tidak cocok, koneksi sangat tidak stabil.
Saya sarankan hanya menggunakan CDN seperti di bawah ini untuk klien.
@ref: https://cdnjs.com/libraries/socket.io
I hope it helps.
Pengembang Perang Feodal?? Ini bagus.
Saya juga punya masalah ini juga.
Pengguna terputus secara acak karena transportasi dekat dan batas waktu ping.
Saya juga mencoba mengubah banyak opsi (interval ping, batas waktu ping, transfer ...) tetapi tidak berhasil.
Saya memeriksa versi server dan soket.io klien
Banyak orang menderita masalah ini, tetapi saya tidak dapat menemukan solusi apa pun.
Ada berita tentang masalah ini, karena saya memiliki masalah yang sama persis!
Saya memiliki masalah yang sama juga ketika saya menyebarkan ke k8ns tetapi ketika saya menjalankannya secara lokal itu berfungsi dengan baik.
saya juga menderita ini...
@talas9 @muhammadnasr @htamop pertanyaan umum untuk dapat men-debug / mereproduksi masalah:
Terima kasih!
Saya telah mencobanya dengan 2.1.0 dan 2.0.4 klien dan server. Di chrome dan safari (terbaru).
Ketika saya menjalankan secara lokal itu berfungsi dengan baik (dapat terhubung selama lebih dari satu jam tanpa terputus), tetapi ketika saya menyebarkan ke K8ns di belakang ingress loadbalancer, masalah ini terjadi ...
Koneksi FYI ditutup tepat setelah 25 detik setiap kali, lihat tangkapan layar
@talas9 @htamop @dnwldbs84 apakah Anda menggunakan penyeimbang beban?
@darrachequesne Penyeimbang beban mana yang Anda rekomendasikan untuk digunakan dengan socket.io ?
@muhammadnasr @darrachequesne
Saya menggunakan server 2.1.0 dan klien 1.0.0 (android)
Saya perlu menjaga koneksi tetap stabil selama 8~9 jam tetapi tiba-tiba terputus.
Saya mengubah kedua versi menjadi 1.7.4 dan 0.8.3? menurut posting solusi lainnya. Saya akan mencoba menguji apakah itu berfungsi dengan baik besok
Saya belum pernah menggunakan penyeimbang beban. Baik klien dan server menggunakan versi 2.0.3 dari Socket.io (Saya tidak dapat mengingat semua versi yang saya gunakan). Saya tidak tahu browser mana yang menyebabkan masalah. Namun, sebagian besar pengguna telah menggunakan Chrome. Dalam kasus saya, pemutusan dilakukan secara acak sehingga tidak dapat mereproduksi.
Dan saya berubah menjadi ws. Saya tidak yakin apakah masalahnya terpecahkan.
@muhammadnasr @darrachequesne @dnwldbs84
Saya pikir itu diselesaikan dalam kasus saya.
Saya menggunakan 0.8.3 socket.io-client di layanan latar depan Android (api 26) dan versi 1.3.5 di server nodejs.
Namun, masalahnya mungkin bukan versi.
Saya mengubah pingInterval di server menjadi 10ms dan tampaknya berfungsi dengan baik (ping timeout dan transport close tidak terjadi)
var io = membutuhkan('socket.io')(http, {pingInterval: 10, pingTimeout: 4000 });
10 milidetik terlalu sempit, dengan cara ini jaringan akan kewalahan.
10 milidetik adalah untuk mempersempit, dengan cara ini jaringan akan kewalahan.
Benar!
@muhammadnasr penyeimbang beban apa pun harus berfungsi. Silakan lihat contoh berikut:
Sticky-session diperlukan, jika Anda mengaktifkan polling (yang merupakan default).
@darrachequesne Saya memiliki masalah yang sama, setelah sekitar 8~9 jam soket terputus dengan alasan "transportasi tutup"
Saya menggunakan:
Chrome: 61.0.3163.100
Electron: 2.0.2
Socket.io: 2.1.1
Punya masalah yang sama, dapat memperbaikinya menggunakan CDN dari komentar ini https://github.com/socketio/socket.io/issues/3025#issuecomment -329024833 dan mengatur batas waktu dan interval seperti di bawah ini:
io.set('heartbeat timeout', 60000);
io.set('heartbeat interval', 25000);
Hai,
Kami memiliki masalah yang sama dengan socket.io ketika dijalankan di bawah Kubernetes dan NGINX Ingress Controller.
Ketika konfigurasi nginx dimuat ulang, ia membuat ulang proses dan semua komunikasi yang ada dihapus, yang menyebabkan transport close
, penerapan lain yang menggunakan pengontrol ingress dapat menyebabkan konfigurasi memuat ulang
Pertama-tama, terima kasih untuk proyek yang luar biasa ini.
Masalah yang sama di sini, mungkin saya akan membawakan Anda sesuatu yang baru.
Saya memiliki server ws, dan klien ws pada node js.
Klien ws ini digunakan dari aplikasi node js di mana merupakan layanan (layanan mikro).
Klien ws lain dari browser web (dari aplikasi klien) berkomunikasi melalui server ws dengan layanan node js ini.
Semuanya bekerja seperti yang diharapkan.
Pada stress test sekarang (10 klien meminta data secara intensif), di akhir tes, ketika semua pekerjaan dan transaksi telah selesai, koneksi layanan ditutup dengan kesalahan "transport close". Ini tidak selalu terjadi.
Ini adalah konfigurasi server:
pingWaktu habis: 15000,
pingInterval: 20000,
Sepertinya selama beban berat beberapa ping hilang...? atau saya tidak tahu.
Apakah ini sesuatu yang harus saya harapkan?
Juga, dengan konfigurasi default pingTimeout: 2000, saya mendapatkan kesalahan ini di tengah stress test. Ini juga benar-benar tidak terduga, tetapi katakanlah server kelebihan beban dan tidak dapat merespons dalam 2 detik (!) dan kami mungkin mendapatkan kesalahan ini. Tapi sekarang dengan pingTimeout: 15000 itu terjadi hampir 50% dan hanya setelah akhir tes.
Hmho, saya percaya layanan mikro seharusnya mengharapkan kesalahan semacam ini, bahkan jika mereka berjalan pada lan yang sama, tetapi pertanyaannya adalah mengapa ini terjadi?
Saya mencoba membuat pengaturan kecil untuk mereproduksi masalah ini tetapi saya tidak berhasil.
Bagaimana cara mengaktifkan log? DEBUG=socket.io* tidak berfungsi. Meskipun variabel disetel, saya tidak mendapatkan output apa pun.
Saya sangat percaya bahwa ini terkait dengan #2924.
Menghubungkan kembali pada klien disebabkan oleh beberapa browser (safari dan chrome) throttling timer untuk tab tidak aktif untuk menghemat baterai.
Ini menghasilkan pesan detak jantung tertunda dari klien dan server menutup koneksi karena pingTimeout.
Meningkatkan pingTimeout berfungsi sampai batas tertentu tetapi saya masih mendapatkan koneksi kembali di lingkungan produksi.
Saya memiliki masalah yang sama juga ketika saya menyebarkan ke k8ns tetapi ketika saya menjalankannya secara lokal itu berfungsi dengan baik.
@muhammadnasr di mana Anda bisa melewati masalah penyebaran di K8? Saya mengalami masalah serupa.
@bheema01 pastikan Anda mengaktifkan stickysession di proxy/loadbalancer Anda dan itu akan berfungsi
Punya kesalahan yang sama
Masalah yang sama ..... klien terhubung dan terputus berulang kali ketika titik akhir soket sisi server berada di belakang penyeimbang beban. Bahkan setelah mengkonfigurasi sesi lengket , masalah masih ada . @muhammadnasr apakah Anda dapat menyelesaikan masalah ini.
Saya telah melihat kesalahan ini, ketika utas sering diblokir selama lebih dari 200 ms.
Jika ini sering terjadi, ini buruk untuk socket.io _dan juga untuk aplikasi Anda_.
socket.io memiliki batas waktu untuk memeriksa detak jantung koneksi.
Jika batas waktu ini terlampaui maka koneksi akan dimatikan dan kami mendapatkan kesalahan ini.
@varunSabnis setelah memperbaiki sesi lengket, semuanya bekerja dengan lancar.
@dennisat Saya mencoba memeriksa berapa lama klien saya menerima paket pong. Setiap kali melampaui 200 ms, yang diuji baik dengan server soket di cloud dan server soket di localhost saya. Pengaturan lokal tidak memutuskan soket (semuanya berfungsi dengan baik), sedangkan di soket pengaturan cloud terus terhubung dan terputus. Jadi, saya rasa bukan itu masalahnya.
@muhammadnasr oke, itu bagus. Sebenarnya sudah mengaktifkannya tetapi masih mengalami beberapa masalah.
@muhammadnasr @darrachequesne @dnwldbs84
Saya pikir itu diselesaikan dalam kasus saya.
Saya menggunakan 0.8.3 socket.io-client di layanan latar depan Android (api 26) dan versi 1.3.5 di server nodejs.
Namun, masalahnya mungkin bukan versi.
Saya mengubah pingInterval di server menjadi 10ms dan tampaknya berfungsi dengan baik (ping timeout dan transport close tidak terjadi)
var io = membutuhkan('socket.io')(http, {pingInterval: 10, pingTimeout: 4000 });
Ini bekerja secara ajaib, terima kasih!!!!!!!
Saya menemukan saya mendapat 'transport close' setiap interval ping.
Aku benar-benar lelah dengan masalah ini.
Saya pikir kalian harus memeriksa versi "socket.io" dengan "socket.io-client".
jika versi server / klien tidak cocok, koneksi sangat tidak stabil.Saya sarankan hanya menggunakan CDN seperti di bawah ini untuk klien.
@ref: https://cdnjs.com/libraries/socket.io
I hope it helps.
It works even more magically.
Seems that we can close this issue with your answer, haha
Akhirnya, saya mengetahuinya karena ketidakcocokan versi klien dan server.
Semuanya berfungsi dengan baik sekarang ketika saya membuat klien dan server berbagi versi socket.io yang sama.
Saya pikir logika ping pong mungkin berbeda dalam versi socket.io yang berbeda, dan server tidak menerima acara ping dari sisi klien dalam interval ping, yang memberikan pesan 'transport close'.
Saya mengalami masalah pemutusan socket.io setiap 30 detik setelah menerapkan ke Google Cloud Platform (GCP). Ternyata itu adalah batas waktu http default yang digunakan oleh Global Load Balancer. Dokumentasi GCP mengatakan Anda harus mengubah nilai saat menggunakan soket web. Petunjuk untuk mengubah pengaturan ada di sini:
https://cloud.google.com/load-balancing/docs/backend-service#timeout -setting
masih menghadapi masalah yang sama pada "socket.io": "2.2.0",
"socket.io-client": "2.2.0",
socket.io- client:socket close (ping timeout) +22s
Sama disini. Server lokal tidak pernah mendapat masalah. Tetapi ketika ditempatkan di belakang penyeimbang beban, ia memiliki batas waktu ping secara acak. Mungkin 1 dari 50 kali. Saya telah mencoba menggunakan versi CDN dan menambahkan sesi lengket. Masalahnya masih ada.
Tidak ada yang berhasil untuk saya selain beberapa logika reconnect khusus. Jika klien mendapatkan acara buka soket dengan id yang berbeda dari yang sebelumnya, kirim server acara sambungkan kembali dengan id lama & baru. Kemudian di server cukup perbarui id soket pemain dan kirim ulang status permainan.
@tmusaev dapatkah Anda memposting logika rekoneksi khusus untuk klien?
Saya memiliki masalah yang sama: 'transport close'
memiliki masalah yang sama. akhirnya saya menyelesaikannya. Nginx adalah server proxy saya, tetapi proxy_read_timeout
konfigurasi adalah 60-an, ini menunjukkan bahwa jika klien atau server tidak memancarkan pesan apa pun dalam 60-an, nginx akan terputus, jadi kita bisa mendapatkan transport close
errorMsg.
solusinya:
proxy_read_timeout
menjadi 600 detik atau lebihsetInterval
untuk mengirim beberapa pesan di Front-end"react": "16.8.3",
"react-native": "^0.59.9",
"socket.io": "^2.2.0"
Saya telah menggunakan perpustakaan ini untuk mengobrol dan mendapatkan beberapa acara. Ini berfungsi dengan baik di ios tetapi menimbulkan masalah di Android. Itu kehilangan koneksi soket kapan saja dan terhubung kembali. Ini terus menampilkan perilaku yang sama. dan juga berikan kesalahan transport close atau ping timeout ini
"react": "16.8.3", "react-native": "^0.59.9", "socket.io": "^2.2.0"
Saya telah menggunakan perpustakaan ini untuk mengobrol dan mendapatkan beberapa acara. Ini berfungsi dengan baik di ios tetapi menimbulkan masalah di Android. Itu kehilangan koneksi soket kapan saja dan terhubung kembali. Ini terus menampilkan perilaku yang sama. dan juga berikan kesalahan transport close atau ping timeout ini
+1
Dalam kasus kami, masalah ini disebabkan oleh proksi CDN. Saya memecahkan masalah ini dengan menghubungkan socket.io ke situs asli yang bukan proksi CDN.
Kami mengatasi masalah ini dengan memperbarui pengontrol masuknya nginx!
Setelah membaca beberapa komentar di utas yang berbeda, saya sudah mencoba hampir semua saran yang dibuat untuk mengurangi masalah penutupan transportasi ini. Terlepas dari versi yang saya gunakan di klien/server (saat ini 2.0.3), saya mendapatkan perilaku ini setelah saya menerapkan layanan mikro saya menggunakan Kubernetes.
Saat ini, server memiliki konfigurasi berikut:
Seperti yang telah disebutkan orang lain, setiap kali saya menjalankan aplikasi secara lokal tidak ada pemutusan. Saya telah membaca di utas yang berbeda bahwa versi 3 untuk socket.io akan mengubah ping/pong sehingga selesai untuk server dan ini mungkin membantu untuk memperbaikinya. Adakah yang punya berita atau pembaruan tentang masalah ini atau kemungkinan tanggal untuk versi baru ini?
Saya telah melihat kesalahan ini, ketika utas sering diblokir selama lebih dari 200 ms.
Jika ini sering terjadi, ini buruk untuk socket.io _dan juga untuk aplikasi Anda_.
socket.io memiliki batas waktu untuk memeriksa detak jantung koneksi.
Jika batas waktu ini terlampaui maka koneksi akan dimatikan dan kami mendapatkan kesalahan ini.
Bagi mereka yang menggunakan Socket.IO untuk mengirim data dalam jumlah besar, pastikan untuk melakukannya dengan cara yang tidak memblokir utas. Saya menemukan ini hari ini menggunakan klien soket di React Native dan saya menggunakannya untuk mengirim file ke server. Karena cara kami menulis pengiriman file melalui soket, yang pada dasarnya adalah all-in-one-go alih-alih berurutan, utas JS tersendat dan tidak dapat mengirim pong kembali ke server, memutuskannya, memberi kami ini kesalahan.
Saya memiliki masalah yang sama pada aplikasi saya, saya rasa bukan masalah ping pong. Saya ragu itu harus menjadi masalah karena sisi server yang menutup pengangkutan soket.
Masalah yang sama. Di browser Sudut.
Konfigurasi ini telah sangat mengurangi jumlah rekoneksi :
Saya menggunakan forceJSONP karena cors
Setelah analisis saya, saya menemukan masalah di bawah ini
ISU:
Soket berfungsi dengan baik tanpa terputus secara lokal, tetapi ketika digunakan ke lingkungan, soket terputus dengan "transport close" sebagai alasan pemutusan.
Saya melihat masalah ini hanya ketika menjalankan aplikasi node menggunakan layanan pemula atau layanan systemmd, jika kami menjalankan aplikasi seperti node app.js, saya TIDAK melihat masalah ini.
PERBAIKAN SEDERHANA/SOLUSI:
Di sisi klien, pada pemutusan soket, soket memancarkan tambahkan pengguna (sudut 11)
self.socket.on('disconnect', (reason) => {
if(currentUser){
self.socket.emit('add user', currentUser);
}
})
Dengan skenario di atas, semua pengguna selalu terhubung dan online, akan terputus saat logout
Komentar yang paling membantu
Saya mengalami masalah pemutusan socket.io setiap 30 detik setelah menerapkan ke Google Cloud Platform (GCP). Ternyata itu adalah batas waktu http default yang digunakan oleh Global Load Balancer. Dokumentasi GCP mengatakan Anda harus mengubah nilai saat menggunakan soket web. Petunjuk untuk mengubah pengaturan ada di sini:
https://cloud.google.com/load-balancing/docs/backend-service#timeout -setting