Apakah ada cara untuk memutuskan klien dengan SocketIO, dan benar-benar menutup koneksi? Jadi, jika seseorang terhubung ke server saya, dan saya ingin menutup koneksi antara mereka dan server saya, bagaimana saya akan melakukannya?
117
iptables
), semakin banyak sumber daya yang akan Anda hemat. Dalam banyak kasus, hanya dengan menendang klien saja sudah cukup, karena socketio tidak terhubung secepat itu, dan jika seseorang benar-benar ingin melakukan DoS kepada Anda, mereka tetap memiliki cara lain (misalnya mendownload halaman dari Anda).socket.disconnect()
hanya dapat digunakan di sisi klien, bukan di sisi server.Client.emit('disconnect')
memicu peristiwa pemutusan hubungan di server, tetapi tidak secara efektif memutuskan klien. Klien tidak mengetahui pemutusan hubungan.Jadi pertanyaannya tetap: bagaimana cara memaksa klien untuk memutuskan koneksi dari sisi server?
sumber
Client.emit('disconnect')
secara manual lagi dengan versi socket.io terbaru, sekarang ada sisi serversocket.disconnect()
(lihat jawaban saya).socket.disconnect()
bisa digunakan di sisi server juga.disconnect()
fungsi selesai?Ada alasan mengapa Anda tidak dapat meminta server mengirimkan pesan ke klien yang membuatnya memanggil fungsi putuskan sambungan?
Pada klien:
Di Server:
sumber
Dengan asumsi soket Anda bernama soket, gunakan:
sumber
Bagi mereka yang menemukan ini di google - ada solusi untuk ini sekarang:
Socket.disconnect()
menendang klien (sisi server). Tidak ada kesempatan bagi klien untuk tetap terhubung :)sumber
disconnect
untuk mengetahui apakah sudah terputus. Bisa jugaclose
acaranya, saya kurang yakin. Lihat dokumentasi socket.io untuk informasi lebih lanjut tentang ini.Memeriksa pagi ini tampaknya sekarang:
https://socket.io/docs/client-api/#socket-close
sumber
Dalam kasus saya, saya ingin meruntuhkan koneksi yang mendasarinya dalam hal ini saya harus menelepon
socket.disconnect(true)
seperti yang Anda lihat diperlukan dari sumbernya di sinisumber
client._onDisconnect()
harus bekerjasumber
Socket.io menggunakan pola EventEmitter untuk memutuskan / menghubungkan / memeriksa detak jantung sehingga Anda dapat melakukannya.
Client.emit('disconnect');
sumber
Ini tidak berhasil untuk saya:
Ini berhasil untuk saya:
Menyerahkan
true
akan menutup koneksi yang mendasari ke klien dan bukan hanya namespace klien yang terhubung ke Dokumentasi Socket IO .Contoh kasus penggunaan: Klien memang terhubung ke server soket web dengan token akses yang tidak valid (token akses diserahkan ke server soket web dengan parameter koneksi). Server soket web memberi tahu klien bahwa ia akan menutup koneksi, karena token aksesnya tidak valid:
sumber
Saya menggunakan
client.emit('disconnect')
+client.removeAllListeners()
untuk klien yang terhubung untuk mengabaikan semua acara setelah terputussumber
Saya menggunakan di sisi klien
socket.disconnect();
sumber
gunakan:
jangan gunakan :
sumber
Anda dapat melakukannya
socket = undefined
dengan menghapus soket mana yang telah Anda sambungkan. Jadi ketika ingin terhubung lakukan socket (url)Jadi akan terlihat seperti ini
sumber
Tambahkan koneksi soket baru ke array dan kemudian ketika Anda ingin menutup semua - loop melaluinya dan putuskan. (sisi server)
sumber