[英]How can I register a client-side event listener on a server-side event?
(當然,假設它甚至可以在.Net中使用。)
最終,我想要實現的是基於AJAX的消息傳遞系統。 我已經有了一個消息數據庫表和一個ASPX來添加新消息(並聲明舊消息不再相關)。
當前的消息傳遞系統每15秒輪詢一次服務器,然后重新拉出當前的消息集。
我要做的是:在$(document).ready()上,注冊一個監聽服務器端事件的ajax回調函數(例如,MessagesUpdated)在表插入/更新時,觸發MessagesUpdated服務器端。
這樣,無論何時更新表(或添加新記錄),任何偵聽的客戶端都知道新數據可用,然后可以重新輪詢服務器。
理想情況下,我還希望將新數據作為事件參數提供(以最小化重新輪詢數據庫)。
我可以在其他語言中找到類似這樣的引用,但我找不到任何實際的代碼示例來啟動我。
假設這可以通過.Net進行,任何人都可以幫我開始這個嗎?
我正在使用2.0 Framework。 另外,當我添加一個VB.Net標簽時,我可以很好地閱讀C#,所以請隨意用兩種語言發布。
提前致謝!
皮特
看看長期投票。 基本上它所做的是在AJAX請求上設置一個很長的超時時間。 然后客戶端等待服務器響應。 這比每隔幾秒發送請求更有效和即時。
對於現代瀏覽器,您可以使用websockets打開與服務器的連續連接,服務器可以通過該連接通知您服務器端事件。 在沒有支持websockets的瀏覽器中,您需要使用mrtsherman的答案中提到的長輪詢。
HTML5引入了websockets來解決這個問題,但支持很少。 如果您使用它,您將需要一個后備,這可能是長輪詢mrtsherman描述。
我懷疑它是否適用於.NET 2.0,但是如果你可以解決這個問題,你應該查看SignalR 。 SignalR是一個完整的客戶端和服務器端解決方案,在客戶端使用JS,在后端使用ASP.NET來創建這些類型的應用程序。 有一個很好的總結在這里 。
直接從該博客文章引用:
在客戶端
$(function () {
// Proxy created on the fly
var chat = $.connection.chat;
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
$("#broadcast").click(function () {
// Call the chat method on the server
chat.send($('#msg').val());
});
// Start the connection
$.connection.hub.start();
});
並在服務器上
public class Chat : Hub
{
public void Send(string message)
{
// Call the addMessage method on all clients
Clients.addMessage(message);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.