Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在服务器端事件上注册客户端事件侦听器?_Javascript_Jquery_Asp.net_Ajax_Vb.net - Fatal编程技术网

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

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服务器端 这样,每当更新表(或添加新记录)时

(当然,假设这在.Net中也是可能的。)

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

当前消息传递系统只需每隔15秒轮询服务器,然后重新提取当前消息集

我希望做的是: 在$(document).ready()上注册一个ajax回调函数,该函数侦听服务器端事件(例如,MessagesUpdated) 在表插入/更新中,fire MessagesUpdated服务器端

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

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

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

假设这可以通过.Net实现,有人能帮我开始吗

我正在使用2.0框架。 另外,虽然我添加了一个VB.Net标记,但我可以很好地阅读C,所以请随意用这两种语言发表文章

提前谢谢


皮特

看看长轮询。基本上,它所做的是在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);
    }
}