Seperti yang dapat Anda lihat di Dokumentasi Microsoft ini tentang Timeout dan pengaturan keepalive Anda dapat menentukan DisconnectTimeout dalam opsi.
Contoh:
protected void Application_Start(object sender, EventArgs e)
{
// Make long-polling connections wait a maximum of 110 seconds for a
// response. When that time expires, trigger a timeout command and
// make the client reconnect.
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);
// Wait a maximum of 30 seconds after a transport connection is lost
// before raising the Disconnected event to terminate the SignalR connection.
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
// For transports other than long polling, send a keepalive packet every
// 10 seconds.
// This value must be no more than 1/3 of the DisconnectTimeout value.
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
RouteTable.Routes.MapHubs();
}
Sunting : Karena Anda ingin mematikan koneksi dari klien, apa pun yang Anda lakukan, Anda berbicara tentang CancellationToken
perilaku tetapi sayangnya ini masih tidak didukung di SignalR seperti yang Anda lihat di sini dan di sini , tim ingin melakukan itu SignalR
tetapi masih ada tidak ada berita tentang itu.
Silakan baca dokumen microsoft ini tentang acara Hub seumur hidup. Anda dapat mengubah nilai default untuk pengaturan ini, mengaturnya
Application_Start
diGlobal.asax
file Anda . Tetapi dengan cara ini Anda tidak dapat sepenuhnya mengontrol sisi klien. Jadi, Anda menggunakansetTimeout
fungsi javascript dan melewatkan waktu bentuk server ketika pengguna baru connect.it mungkinGlobalHost.Configuration.DisconnectTimeout
atau kapan saja Anda inginkan. Saya memberikan contoh lengkap dengan proyek demo. Sebenarnya saya menggunakan logika ini dalam sistem tiket yang sangat besar untuk memegang tiket secara real-time. (harap baca semua komentar sebaris)Model:
Pusat:
TestView:
hub.js:
(Diuji)
sumber
Anda perlu menentukan batas waktu. Di server Anda dapat mengatur DisconnectTimeout, seperti ini:
https://zzz.buzz/2016/05/11/setting-timeout-for-signalr-for-easier-debugging/
sumber
Edit yang Diperbarui, silakan lihat Opsi 3 di bawah ini. Semua yang lain mengandalkan batas waktu, saya diposting putuskan paksa.
Jika Anda mencoba Memutus Kekuatan - Anda bisa mendapatkan daftar Pengguna yang Terhubung dan memanggil
ForceLogOut
Fungsi di sisi server, saya melihat ini di suatu tempat di proyek kode, saya harap ini membantu. Jika Anda hanya ingin memaksaLogout / membunuh beberapa pengguna, cukup lewati saja dan matikan koneksi itu saja.Sisi server
Sisi klien
Diperbarui dengan Opsi 3 : berdasarkan permintaan ... solusi lain bergantung pada waktu habis, tetapi Anda juga dapat memaksanya secara langsung dengan membuang koneksi sendiri
Saya membuka kode SignalR, dan di dalam Anda dapat melihat
DisposeAndRemoveAsync
penghentian koneksi klien yang sebenarnya.1- Anda dapat memodifikasi atau menelepon
DisposeAndRemoveAsync
dengan koneksi Anda.2- Lalu panggil
RemoveConnection(connection.ConnectionId);
Perhatian, lakukan pembersihan sendiri saat ini dilakukan.
sumber
$.connection.hub.stop()
-Fungsi melempar kesalahan karena permintaan belum sepenuhnya dikirim ke Backend. Jadi saya mencari solusi yang membunuh koneksi aktif saat ini bahkan jika ada permintaan yang sedang berjalan.