繁体   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