SocketIO ile bir istemcinin bağlantısını kesmenin ve bağlantıyı tam anlamıyla kapatmanın bir yolu var mı? Öyleyse birisi sunucuma bağlıysa ve ben onunla sunucum arasındaki bağlantıyı kapatmak istersem, bunu nasıl yapabilirim?
SocketIO ile bir istemcinin bağlantısını kesmenin ve bağlantıyı tam anlamıyla kapatmanın bir yolu var mı? Öyleyse birisi sunucuma bağlıysa ve ben onunla sunucum arasındaki bağlantıyı kapatmak istersem, bunu nasıl yapabilirim?
Yanıtlar:
Düzenleme: Bu artık mümkün
Artık socket.disconnect()sunucu tarafında arama yapabilirsiniz .
Orijinal cevabım:
Bu henüz mümkün değil.
Buna da ihtiyacınız varsa, bu konuda oy verin / yorum yapın .
iptables), o kadar çok kaynak tasarrufu yaparsınız. Çoğu durumda, sadece müşteriyi tekmelemek yeterli olacaktır, çünkü socketio o kadar hızlı bağlanmaz ve eğer birisi sizi gerçekten DoS yapmak istiyorsa, yine de başka yolları vardır (örneğin sizden sayfa indirmek).
socket.disconnect() sadece istemci tarafında kullanılabilir, sunucu tarafında kullanılamaz.
Client.emit('disconnect')sunucudaki bağlantı kesilme olayını tetikler, ancak istemcinin bağlantısını etkin bir şekilde kesmez. Müşteri bağlantının koptuğunun farkında değil.
Öyleyse soru kalır: Bir istemciyi sunucu tarafından bağlantısını kesmeye nasıl zorlayabilirim?
Client.emit('disconnect')Son soket.io sürümlerinde artık manuel olarak aramak zorunda değilsiniz , artık bir sunucu tarafı var socket.disconnect()( cevabıma bakın).
socket.disconnect()sunucu tarafında da kullanılabilir.
disconnect()işlev tamamlandıktan sonra geri aramaya bazı parametreler iletirsem ?
Sunucunun istemciye bağlantı kesme işlevini çağırmasını sağlayan bir mesaj gönderememenizin herhangi bir nedeni var mı?
İstemcide:
socket.emit('forceDisconnect');
Sunucuda:
socket.on('forceDisconnect', function(){
socket.disconnect();
});
Soketinizin adlandırılmış soketi olduğunu varsayarak, şunu kullanın:
socket.disconnect()
Bunu google'da bulanlar için - bunun için şu anda bir çözüm var:
Socket.disconnect()istemciyi (sunucu tarafı) başlatır. Müşterinin bağlantıda kalma şansı yok :)
disconnectkesilmediğini öğrenmek için soketin olayını dinleyin . closeOlay da olabilir, tam olarak emin değilim. Bununla ilgili daha fazla bilgi için socket.io'nun belgelerine bakın.
Bu sabah kontrol edersek, şu anda görünüyor:
socket.close()
Benim durumumda, temeldeki bağlantıyı koparmak istedim, bu durumda socket.disconnect(true), burada kaynaktan gerekli olduğunu görebileceğiniz gibi aramak zorunda kaldım.
Socket.io, yapabilmeniz için kalp atışlarını kesmek / bağlamak / kontrol etmek için EventEmitter modelini kullanır. Client.emit('disconnect');
Bu benim için işe yaramadı :
`socket.disconnect()`
Bu çalışma yaptı benim için:
socket.disconnect(true)
Devretmek, trueyalnızca istemcinin Socket IO Documentation'a bağlı olduğu ad alanını değil, istemciye olan temel bağlantıyı kapatır .
Örnek bir kullanım durumu: İstemci, geçersiz erişim belirteciyle web soketi sunucusuna bağlandı (erişim belirteci, bağlantı parametreleriyle web soket sunucusuna aktarıldı). Web soket sunucusu, istemciye geçersiz erişim belirteci nedeniyle bağlantıyı kapatacağını bildirir:
// (1) the server code emits
socket.emit('invalidAccessToken', function(data) {
console.log(data); // (4) server receives 'invalidAccessTokenEmitReceived' from client
socket.disconnect(true); // (5) force disconnect client
});
// (2) the client code listens to event
// client.on('invalidAccessToken', (name, fn) => {
// // (3) the client ack emits to server
// fn('invalidAccessTokenEmitReceived');
// });
Bağlantı kesildikten sonra tüm olayları yok saymak için bağlı istemci için client.emit('disconnect')+ kullanıyorumclient.removeAllListeners()
kullanım:
socket.Disconnect () // tamam
kullanmayın :
socket.disconnect ()
Sen yapabilirsin socket = undefinedBağlandıktan soket silme de. Yani ne zaman bağlanmak istediğinizde soket (url)
Yani böyle görünecek
const socketClient = require('socket.io-client');
let socket;
// Connect to server
socket = socketClient(url)
// When want to disconnect
socket = undefined;
Bir diziye yeni soket bağlantıları ekleyin ve ardından hepsini kapatmak istediğinizde - döngü yapın ve bağlantıyı kesin. (sunucu tarafı)
var socketlist = [];
io.sockets.on('connection', function (socket) {
socketlist.push(socket);
//...other code for connection here..
});
//close remote sockets
socketlist.forEach(function(socket) {
socket.disconnect();
});