如何在服务器端事件上注册客户端事件侦听器?

时间:2011-12-28 18:13:31

标签: javascript jquery asp.net ajax vb.net

(当然,假设它甚至可以在.Net中使用。)

最终,我想要实现的是基于AJAX的消息传递系统。 我已经有了一个消息数据库表,还有一个用于添加新消息的ASPX(并声明旧消息不再相关)。

当前的消息传递系统每15秒轮询一次服务器,然后重新拉出当前的消息集。

我期待的是: 在$(document).ready()上,注册一个侦听服务器端事件的ajax回调函数(例如,MessagesUpdated) 在表插入/更新时,触发MessagesUpdated服务器端。

这样,无论何时更新表(或添加新记录),任何侦听的客户端都知道新数据可用,然后可以重新轮询服务器。

理想情况下,我还希望将新数据作为事件参数提供(以尽量减少对数据库的重新轮询)。

我可以在其他语言中找到类似这样的引用,但我找不到任何实际的代码示例来启动我。

假设这可以通过.Net进行,任何人都可以帮我开始吗?

我正在使用2.0 Framework。 另外,当我添加一个VB.Net标签时,我可以很好地阅读C#,所以请随意用任何一种语言发布。

提前致谢!

皮特

4 个答案:

答案 0 :(得分:3)

看看长期投票。基本上它所做的是在AJAX请求上设置一个很长的超时时间。然后客户端等待服务器响应。这比每隔几秒发送一次请求更有效,更快捷。

How to do a long polling client in C#?

答案 1 :(得分:1)

对于现代浏览器,您可以使用websockets打开与服务器的连续连接,服务器可以通过该连接通知您服务器端事件。在没有支持websockets的浏览器中,您需要使用mrtsherman的答案中提到的长轮询。

答案 2 :(得分:0)

HTML5引入了websockets来解决这个问题,但支持很少。如果你使用它,你需要一个后备,这可能是长轮询mrtsherman所描述的。

答案 3 :(得分:0)

我怀疑它适用于.NET 2.0,但是如果你可以解决这个问题,你应该查看SignalR。 SignalR是一个完整的客户端和服务器端解决方案,在客户端使用JS,在后端使用ASP.NET来创建这些类型的应用程序。有一个很好的总结here

直接从该博文中引用:

在客户端

$(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);
    }
}