簡體   English   中英

如何在服務器端事件上注冊客戶端事件偵聽器?

[英]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請求上設置一個很長的超時時間。 然后客戶端等待服務器響應。 這比每隔幾秒發送請求更有效和即時。

如何在C#中建立長輪詢客戶端?

對於現代瀏覽器,您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM