Javascript 如何在服务器端事件上注册客户端事件侦听器?
(当然,假设这在.Net中也是可能的。) 最终,我想要实现的是一个基于AJAX的消息传递系统。 我已经有了一个用于消息的数据库表和一个用于添加新消息(并声明旧消息不再相关)的ASPX 当前消息传递系统只需每隔15秒轮询服务器,然后重新提取当前消息集 我希望做的是: 在$(document).ready()上注册一个ajax回调函数,该函数侦听服务器端事件(例如,MessagesUpdated) 在表插入/更新中,fire MessagesUpdated服务器端 这样,每当更新表(或添加新记录)时,任何侦听的客户端都知道新数据可用,然后可以重新轮询服务器 理想情况下,我还希望将新数据作为事件参数提供(以尽量减少对数据库的重新轮询) 我可以在其他语言中找到类似这样的引用,但我找不到任何实际的代码示例来开始 假设这可以通过.Net实现,有人能帮我开始吗 我正在使用2.0框架。 另外,虽然我添加了一个VB.Net标记,但我可以很好地阅读C,所以请随意用这两种语言发表文章 提前谢谢Javascript 如何在服务器端事件上注册客户端事件侦听器?,javascript,jquery,asp.net,ajax,vb.net,Javascript,Jquery,Asp.net,Ajax,Vb.net,(当然,假设这在.Net中也是可能的。) 最终,我想要实现的是一个基于AJAX的消息传递系统。 我已经有了一个用于消息的数据库表和一个用于添加新消息(并声明旧消息不再相关)的ASPX 当前消息传递系统只需每隔15秒轮询服务器,然后重新提取当前消息集 我希望做的是: 在$(document).ready()上注册一个ajax回调函数,该函数侦听服务器端事件(例如,MessagesUpdated) 在表插入/更新中,fire MessagesUpdated服务器端 这样,每当更新表(或添加新记录)时
皮特看看长轮询。基本上,它所做的是在AJAX请求上设置一个长的超时时间。然后,客户机等待服务器响应。这比每隔几秒钟发送一次请求更高效、更即时
HTML5引入WebSocket来解决这个问题,但支持很少。如果您使用它,您将需要一个回退,这可能是所描述的长轮询mrtsherman。对于现代浏览器,您可以使用它打开到服务器的连续连接,通过它服务器可以通知您服务器端事件。在不支持websockets的浏览器中,您需要使用mrtsherman回答中提到的长轮询。我怀疑它是否适用于.NET 2.0,但如果您可以解决这个问题,您应该检查一下。SignalR是一个完整的客户端和服务器端解决方案,客户端是JS,后端是ASP.NET,用于创建此类应用程序。有一个很好的总结 直接引用该博客文章: 论客户
谢谢大家的建议!经过广泛的研究,并考虑到我的可用服务器,我认为长轮询是一种方式(服务器不支持WebSocket,而SignalR在服务器无论如何都不支持WebSocket时降级为长轮询)。Facebook(甚至twitter、hotmail)的工作原理是每隔几秒钟轮询一次服务器。那样容易多了。你可以用小提琴自己检查。他们不必担心订户和出版商。他们拥有50多万台服务器,因此规模不是问题。他们本可以使用订阅服务器\发布服务器模型,但没有这样做。
$(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);
}
}