[英]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.