Socket.io: Jumlah klien / soket yang terhubung

Dibuat pada 14 Agu 2011  Β·  53Komentar  Β·  Sumber: socketio/socket.io

Hai,

Saya menggunakan io.sockets.clients().length untuk menghitung semua klien yang terhubung saat ini, tetapi setelah beberapa waktu jumlah ini sangat tinggi, banyak klien yang terputus masih ada dalam larik ini.

Di bawah gambar io.sockets.clients().length , diplot setiap 5 menit selama 24 jam. Setelah hitungan mencapai lebih dari ~ 2k, saya memulai ulang server, sekitar 200 hingga 300 klien tersambung kembali, yang merupakan hitungan yang benar.

Connected Clients

Apakah ini cara yang salah untuk menghitung semua klien yang terhubung? Saya juga mencoba menghitung koneksi dan memutuskan koneksi secara manual, tetapi setelah satu hari ada lebih banyak pemutusan daripada koneksi, jumlahnya negatif.

Terkait: https://github.com/LearnBoost/socket.io/issues/349

Performance bug

Komentar yang paling membantu

L2C FAF IT RTFM !!!
β–‘β–‘β–‘β–‘β–‘β–„β–„β–„β–„β–€β–€β–€β–€β–€β–€β–€β–€β–„β–„β–„β–„β–„β–„β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–‘β–‘β–€β–€β–„β–‘β–‘β–‘β–‘
β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–’β–’β–’β–’β–’β–’β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–’β–’β–’β–‘β–‘β–ˆβ–‘β–‘β–‘
β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–„β–ˆβ–ˆβ–€β–„β–„β–‘β–‘β–‘β–‘β–‘β–„β–„β–„β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘
β–‘β–„β–€β–’β–„β–„β–„β–’β–‘β–ˆβ–€β–€β–€β–€β–„β–„β–ˆβ–‘β–‘β–‘β–ˆβ–ˆβ–„β–„β–ˆβ–‘β–‘β–‘β–‘β–ˆβ–‘
β–ˆβ–‘β–’β–ˆβ–’β–„β–‘β–€β–„β–„β–„β–€β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–’β–’β–’β–’β–’β–‘β–ˆ
β–ˆβ–‘β–’β–ˆβ–‘β–ˆβ–€β–„β–„β–‘β–‘β–‘β–‘β–‘β–ˆβ–€β–‘β–‘β–‘β–‘β–€β–„β–‘β–‘β–„β–€β–€β–€β–„β–’β–ˆ
β–‘β–ˆβ–‘β–€β–„β–‘β–ˆβ–„β–‘β–ˆβ–€β–„β–„β–‘β–€β–‘β–€β–€β–‘β–„β–„β–€β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–ˆβ–‘
β–‘β–‘β–ˆβ–‘β–‘β–‘β–€β–„β–€β–ˆβ–„β–„β–‘β–ˆβ–€β–€β–€β–„β–„β–„β–„β–€β–€β–ˆβ–€β–ˆβ–ˆβ–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–ˆβ–ˆβ–‘β–‘β–€β–ˆβ–„β–„β–„β–ˆβ–„β–„β–ˆβ–„β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–ˆβ–‘β–‘β–‘
β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–€β–€β–„β–‘β–ˆβ–‘β–‘β–‘β–ˆβ–‘β–ˆβ–€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–€β–„β–‘β–‘β–‘β–‘β–‘β–€β–€β–„β–„β–„β–ˆβ–„β–ˆβ–„β–ˆβ–„β–ˆβ–„β–€β–‘β–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–„β–„β–‘β–’β–’β–’β–’β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–’β–‘β–‘β–‘β–ˆβ–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–€β–„β–„β–‘β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–‘β–‘β–‘β–‘β–ˆβ–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–„β–„β–„β–„β–„β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–€β–€β–€β–€β–€β–€β–€β–‘β–‘β–‘

Semua 53 komentar

+1. Saya pikir dalam kasus saya ini adalah salah satu masalah terakhir yang menyebabkan masalah memori (berkembang hingga kesalahan segmentasi).

Ya, crash sekitar dua kali sehari dengan kesalahan segmentasi di sini.

yang tercantum dalam "dokumentasi":
http://labs.learnboost.com/socket.io/

di bawah bagian Socket.IO Node.JS server / Listener (lakukan pencarian dalam halaman untuk "splice"). Kutipan:

"Larik klien. Penting: klien yang terputus disetel ke nol, larik tidak disambung."

Untuk membuatnya dari pemikiran ke kode ke dokumentasi berarti harus ada beberapa alasan mengapa pengguna yang terputus tidak dipangkas dari array ini, saya tidak bisa menebak apa alasan itu. Skenario kasus terbaik adalah membuat pelacakan pengguna TERHUBUNG menjadi sakit, dan paling buruk berkontribusi pada kurangnya stabilitas dalam implementasi server node.js / socket.io.

Ditandai sebagai bug kinerja.

saya memiliki masalah yang sama.

dan saya membuat basis nomor saya pada beberapa var dengan i +1 selama acara koneksi dan -1 selama pemutusan hubungan. (jadi ini bukan masalah nol)

Usercount:

https://skitch.com/tomekotomek/f4867/dock

CPU:

https://skitch.com/tomekotomek/f489w/dock

PENYIMPANAN:

https://skitch.com/tomekotomek/f4eyy/graph.php-747x374

BTW.

lebih dari masalah kinerja itu hanya menurunkan waktu kerja kita menjadi kurang dari satu minggu.

Cara saya memikirkan cara melakukan ini adalah dengan menggunakan satu set Redis dari id klien, tambahkan pada socket.io terhubung dan hapus dari set saat putuskan. Perintah SCARD memberi Anda # klien yang terhubung dan SMEMBERS semua ID.

ya, array perlu dibersihkan atau cara yang lebih baik perlu ditemukan untuk menampung klien.

+1

+1

+1
Ini jelas lebih dari sekedar masalah panjang array.
Menambah dan mengurangi penghitung pada koneksi / putuskan masih akan menghasilkan penghitung yang terus meningkat.

+1

+1

+1

+1

+1

Adakah yang mencoba mengisolasi ini ke berbagai transportasi? IE Lihat apakah itu berfungsi sama di
websocket, flashsocket, xhr-polling, dll.

Ini jelas merupakan masalah penting karena kami tidak dapat membiarkan server berjalan secara konsisten tanpa restart. Saya bahkan tidak bisa pergi sehari tanpa setidaknya satu restart karena memori terus bertambah. CATATAN: Dalam node 0.4. * Memori JAUH LEBIH BAIK bagi saya.

+1

saya menemukan masalah yang sama - ingatan saya baru saja terisi. sekitar 1 mb / per menit

dengan sekitar 1500 soket yang terhubung kembali karena klik di situs yang tinggi.

itu harus dimulai ulang setiap hari karena kebocoran memori

L2C FAF IT RTFM !!!
β–‘β–‘β–‘β–‘β–‘β–„β–„β–„β–„β–€β–€β–€β–€β–€β–€β–€β–€β–„β–„β–„β–„β–„β–„β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–‘β–‘β–€β–€β–„β–‘β–‘β–‘β–‘
β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–’β–’β–’β–’β–’β–’β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–’β–’β–’β–‘β–‘β–ˆβ–‘β–‘β–‘
β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–„β–ˆβ–ˆβ–€β–„β–„β–‘β–‘β–‘β–‘β–‘β–„β–„β–„β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘
β–‘β–„β–€β–’β–„β–„β–„β–’β–‘β–ˆβ–€β–€β–€β–€β–„β–„β–ˆβ–‘β–‘β–‘β–ˆβ–ˆβ–„β–„β–ˆβ–‘β–‘β–‘β–‘β–ˆβ–‘
β–ˆβ–‘β–’β–ˆβ–’β–„β–‘β–€β–„β–„β–„β–€β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–’β–’β–’β–’β–’β–‘β–ˆ
β–ˆβ–‘β–’β–ˆβ–‘β–ˆβ–€β–„β–„β–‘β–‘β–‘β–‘β–‘β–ˆβ–€β–‘β–‘β–‘β–‘β–€β–„β–‘β–‘β–„β–€β–€β–€β–„β–’β–ˆ
β–‘β–ˆβ–‘β–€β–„β–‘β–ˆβ–„β–‘β–ˆβ–€β–„β–„β–‘β–€β–‘β–€β–€β–‘β–„β–„β–€β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–ˆβ–‘
β–‘β–‘β–ˆβ–‘β–‘β–‘β–€β–„β–€β–ˆβ–„β–„β–‘β–ˆβ–€β–€β–€β–„β–„β–„β–„β–€β–€β–ˆβ–€β–ˆβ–ˆβ–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–ˆβ–ˆβ–‘β–‘β–€β–ˆβ–„β–„β–„β–ˆβ–„β–„β–ˆβ–„β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–ˆβ–‘β–‘β–‘
β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘β–‘β–‘β–€β–€β–„β–‘β–ˆβ–‘β–‘β–‘β–ˆβ–‘β–ˆβ–€β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–€β–„β–‘β–‘β–‘β–‘β–‘β–€β–€β–„β–„β–„β–ˆβ–„β–ˆβ–„β–ˆβ–„β–ˆβ–„β–€β–‘β–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–„β–„β–‘β–’β–’β–’β–’β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–’β–‘β–‘β–‘β–ˆβ–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–€β–„β–„β–‘β–’β–’β–’β–’β–’β–’β–’β–’β–’β–’β–‘β–‘β–‘β–‘β–ˆβ–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–„β–„β–„β–„β–„β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–‘β–‘
β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–€β–€β–€β–€β–€β–€β–€β–€β–‘β–‘β–‘

Saya baru saja mematikan sisi server transportasi flashsocket dan penggunaan memori DAN penggunaan cpu JAUH LEBIH BAIK. Adakah yang bisa mencobanya dan melihat apakah itu membantu?

+1

Saya mengambilnya kembali, CPU LEBIH BAIK tetapi memori masih bocor perlahan. Saya berasumsi ini karena server kebijakan flash dimatikan?

Tolong berhenti membengkakkan umpan dengan "+1", ini bukan google plus atau facebook ...

man, saya harus melakukannya +1 untuk itu

ada juga Nonaktifkan pemberitahuan untuk Masalah ini di bawah

Dalam kasus saya, socket.manager.closed, socket.manager.handshaken lebih dari socket.manager.open. dan saya tidak tahu cara menghapus koneksi yang tidak berguna

PERSIS sama di sini. Kami harus me-restart server berkali-kali per hari, karena koneksi memakan lebih banyak memori hingga kami kehabisan memori 4GB.
Saya akan sangat senang jika masalah ini teratasi, karena saya tidak dapat terus menggunakan socket.io jika saya harus memulai ulang setiap beberapa jam. (Kami memiliki sekitar 2000 pengguna online pada saat yang sama, menghubungkan dan memutuskan hubungan)

Saya menggunakan socket.io 0.9.10 dan kode berikut untuk menentukan jumlah soket:

var socketIO = membutuhkan ('socket.io']. dengarkan (.....
...
var numberOfSockets = Object.keys (socketIO.connected) .length;

Tidak yakin seberapa akurat angka ini bereaksi terhadap berbagai kasus tepi, tetapi sampai sekarang tampaknya akurat: setiap browser yang terhubung meningkatkan jumlahnya, setiap browser yang ditutup menguranginya.

apakah ada yang salah dengan pendekatan ini?

Mengesampingkan masalah penghitungan (yang bisa diatasi) - masalah memori cukup brutal di sini. Apakah ada harapan untuk diperbaiki di masa depan? Artinya, penerapan socket.io aktivitas tinggi yang berjalan lama sangat sulit untuk dikelola.

Atau, apakah ada yang tahu tentang garpu di luar sana yang telah memperbaiki masalah ini?

Masalah ini terkait dengan kode di bawah (diambil dari socket.io 0.9.10):

  SocketNamespace.prototype.clients = function (room) {
    var room = this.name + (room !== undefined ? '/' + room : '');

     if (!this.manager.rooms[room]) {
         return [];
     }

     return this.manager.rooms[room].map(function (id) {
         return this.socket(id);
     }, this);
  };

metode this.socket(id) membuat instance baru dari soket, jadi menggunakannya pada setiap soket yang terhubung akan menghasilkan kebocoran memori.

@dknaus memberikan solusi yang sangat baik untuk itu;)

@outbounder Dapatkah Anda menunjukkan solusi terbaik apa yang sebenarnya? Karena yang saya lihat di utas ini adalah jumlah soket yang aktif

@tokopedia

 Object.keys(socketIO.connected).length;

ini hanya berlaku jika Anda memiliki toko yang terpasang ke socketio. jika tidak, satu-satunya cara adalah menghitungnya dengan logika khusus seperti:

 io.on("connection", function(s){ 
   connectedCount += 1; 
   s.on("disconnect", function(){
     connectedCount -= 1;
   });
 });

@outbounder tapi saya pikir inti dari bug ini adalah untuk memperbaiki masalah kebocoran memori dengan soket tidak terputus? Apakah saya melewatkan sesuatu?

memori keluar dari suatu tempat, lihat

https://github.com/LearnBoost/socket.io/issues/1015

https://github.com/sockjs/sockjs-node/issues/81

https://github.com/joyent/node/issues/2328#issuecomment -3190337

Tidak yakin apakah websocketnya terkait atau terkait dengan node atau keduanya

sockjs mengalami masalah yang serupa - yang berarti socket.io dan sockjs dapat menggunakan ws lib yang sama, yang memiliki masalah dengan node - atau hanya masalah node umum

+1

Ini masih terjadi pada saya dalam produksi. Saya bahkan tidak memiliki banyak klien yang terhubung, sungguh - 100-200 pada puncaknya. Proses hanya kehabisan memori dan menggantung atau sekarat. Apakah ada yang mengerjakan kebocoran memori ini? Bagaimana saya bisa membantu?

Sejauh yang saya tahu, ini telah menjadi masalah yang diketahui selama berabad-abad dan semua orang dengan aspirasi penerapan aktual telah keluar dari socket.io. Tidak ada pergerakan pada masalah ini, dan engine.io tampaknya tidak mengacaukan inti pengangkut sama sekali, jadi tidak ada alasan untuk mengharapkan hal itu memperbaiki ini juga.

Sejujurnya, saya telah mencari bukti bahwa SIAPA SAJA menyebarkan vanilla socket.io dalam produksi dengan transportasi websocket aktif dan belum menemukan laporan yang dapat diandalkan. Trello adalah pengguna profil tinggi, tetapi mereka telah mengaku menggunakan semacam versi patch yang tidak dirilis dan hanya menggunakan transportasi websocket (pada titik mana, mengapa menggunakan socket.io sama sekali?). Saya telah pindah dari socket.io sepenuhnya karena sepertinya ini tidak akan berubah dalam waktu dekat. Saya tidak dapat menjanjikan sockjs tidak memiliki masalah, tetapi saya yakin itu tidak gagal secepat socket.io jika Anda bergabung / meninggalkan beberapa ribu klien.

Saya baru saja bergumul dengan apa yang menurut saya adalah masalah ini, di aplikasi socket.io/redis saya sendiri, di Nodejitsu. Sepertinya itu adalah toko Redis socket.io. Saya akan beralih ke SockJS dan menulis manajemen Redis saya sendiri.

Log obrolan saya yang sedang mengerjakannya di saluran dukungan #nodejitsu:
https://gist.github.com/4146668

+1

Apakah saya, atau apakah socket.io tidak menggunakan redis lagi?

Bagaimana menambahkan this.store.publish ('disconnect', id); ke Manager.prototype.onClientDisconnect
seperti yang disarankan di sini: https://github.com/LearnBoost/socket.io/issues/831

Apakah akan ada masalah saat menambahkan baris ini ?? Saya ingin tahu.

Kedua itu?

+1

+1

Siapa saja?

Adakah gerakan tentang masalah ini? Saya berharap untuk menerapkannya dalam waktu dekat dan akan sangat menghargai setiap wawasan yang dimiliki orang-orang dengan penerapan produksi tentang masalah ini.

Perbaikan di atas berhasil untuk kami ... beban turun secara signifikan
Pada 4 Jun 2013 11:01, "patrickod" [email protected] menulis:

Adakah gerakan tentang masalah ini? Saya berharap untuk menerapkan dalam waktu dekat dan
akan sangat menghargai wawasan yang dimiliki orang-orang dengan penerapan produksi
tentang masalah ini.

-
Balas email ini secara langsung atau lihat di Gi tHubhttps: //github.com/LearnBoost/socket.io/issues/463#issuecomment -18927408
.

Menonaktifkan dukungan flash socket? Dokumentasi mengatakan bahwa ini sekarang dilakukan secara default.

Saya tidak pernah menghadapi masalah ini tetapi saya masih dalam pengembangan dan pembandingan. Apakah ini sudah beres?

Anda memberitahu kami. Anda melakukan benchmarking. : D

Pada Kamis, 23 Jan 2014 pukul 07.07, Maziyar Panahi [email protected] :

Saya tidak pernah menghadapi masalah ini tetapi saya masih dalam pengembangan dan pembandingan.
Apakah ini sudah beres?

-
Balas email ini secara langsung atau lihat di Gi tHubhttps: //github.com/LearnBoost/socket.io/issues/463#issuecomment -33126062
.

Anda memberitahu kami. Anda melakukan benchmarking. : D

Sejujurnya saya tidak memperhatikan penurunan dalam jumlah besar. Saya telah melihat beberapa koneksi putus setelah 5 6 menit ketika saya menghubungkan 1000 pengguna pada saat yang sama tetapi mereka terhubung kembali dengan sangat cepat dan saya memiliki lebih dari 10K pesan per detik untuk semua pengguna. Jadi menurut saya instans EC2 saya (m1.large) tidak cukup kuat untuk menjaga semuanya tetap hidup tanpa kehilangan sedikit.
Saya bertanya-tanya apakah saya akan menghadapi masalah ini di masa depan. Milik saya hanya menjatuhkan sedikit dan menghubungkannya kembali dalam uji stres. Setelah memutuskan semua, saya dapat melihat jumlah klien turun menjadi 0.

+1

Saya tidak punya masalah dengan semua ini sejak 10.11 ... Saya akan mungkin meletakkannya menggunakan ubuntu 10.10? Bagaimanapun, sepertinya baik-baik saja sekarang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat