(当然,假设它甚至可以在.Net中使用。)
最终,我想要实现的是基于AJAX的消息传递系统。 我已经有了一个消息数据库表,还有一个用于添加新消息的ASPX(并声明旧消息不再相关)。
当前的消息传递系统每15秒轮询一次服务器,然后重新拉出当前的消息集。
我期待的是: 在$(document).ready()上,注册一个侦听服务器端事件的ajax回调函数(例如,MessagesUpdated) 在表插入/更新时,触发MessagesUpdated服务器端。
这样,无论何时更新表(或添加新记录),任何侦听的客户端都知道新数据可用,然后可以重新轮询服务器。
理想情况下,我还希望将新数据作为事件参数提供(以尽量减少对数据库的重新轮询)。
我可以在其他语言中找到类似这样的引用,但我找不到任何实际的代码示例来启动我。
假设这可以通过.Net进行,任何人都可以帮我开始吗?
我正在使用2.0 Framework。 另外,当我添加一个VB.Net标签时,我可以很好地阅读C#,所以请随意用任何一种语言发布。
提前致谢!
皮特
答案 0 :(得分:3)
看看长期投票。基本上它所做的是在AJAX请求上设置一个很长的超时时间。然后客户端等待服务器响应。这比每隔几秒发送一次请求更有效,更快捷。
答案 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);
}
}