【问题标题】:Pushing data from the server to browser via http通过http将数据从服务器推送到浏览器
【发布时间】:2010-12-29 10:04:03
【问题描述】:

在一般聊天应用程序中,客户端的浏览器总是轮询服务器以检查新消息。

// the function to check new messages in server
function check(){

  // but this question is less about jQuery.
  $.ajax({
    type: "POST",
    url: "check.aspx",
    data: "someparam=123",
    success: function(msg){

       // process msg here

       // CHECK IT AGAIN, but sometimes we need to make delay here
       check();
    }
  });
}

然后我读到了Nicholas Allen's blog about Keeping Connections Open in IIS

这让我想到是否可以通过传输分块的 HTTP 将数据从我的服务器推送到客户端的浏览器(这意味着像流,对吗?)并 保持连接打开

在保持连接打开的同时,在服务器中,我想保持运行以检查新消息。可能是这样的

while(connectionStillOpen) {
    // any new message?
    if( AnyMessage() )
    {
       // send chunked data, can I?
       SendMessageToBrowser();
       // may be we need to make delay here
       Sleep(forSomeTime);
    }
}

这是一个原始的想法。

在 ASP.net 中创建的我的聊天应用程序。由于我对 WCF 和高级 IIS 流模块的了解较少,我需要您的建议来实现这个想法。

是的,不可能可能就是答案。但如果仍然不可能,我需要知道为什么。

更新(3 年后):

这正是我想要的: Microsoft ASP.NET SignalR

【问题讨论】:

    标签: asp.net wcf iis keep-alive


    【解决方案1】:

    无法从服务器推送数据。因为 HTTP 只响应请求,不能直接联系客户端。但是我们这里有一个称为 COMET 或 ReverseAJAX 的解决方法,通过使用这种技术我们可以模拟双工调用。

    它不过是长寿的 AJAX 调用,并将响应客户端 如果有预期的事件发生 在服务器端,否则它会停留 冷静的。这颗彗星(编程) 维基百科文章解释了更多关于 方法

    我在这里asp-net-chat-with-wcf 回答了类似的问题。请检查

    【讨论】:

      【解决方案2】:

      服务器无法启动与客户端的通信。所以服务器无法将数据推送到客户端。但是您可以使用“反向 AJAX”来实现推送机制。下面的文章应该会更清楚。

      Reverse AJAX

      【讨论】:

        【解决方案3】:

        当前一代的 JavaScript/Ajax 库不提供对部分响应的访问;只有在整个请求完成后您才会收到通知。

        如果您愿意使用 Silverlight,则可以使用原始 TCP 连接。

        Comet 是另一种选择——但这基本上只是仍然源自客户端脚本的长轮询。

        【讨论】:

          【解决方案4】:

          有一种方法称为反向 AJAX。通过使用哪个服务器可以将数据传输到客户端,而无需客户端的任何请求。

          【讨论】:

          【解决方案5】:

          是的,将数据从服务器直接推送到浏览器客户端是不可能的。

          但您可以每隔 3 秒检查一次服务器是否有新消息,然后刷新您的客户端界面。

          也许你想看看一些Comet implementations

          【讨论】:

            猜你喜欢
            • 2015-09-15
            • 1970-01-01
            • 1970-01-01
            • 2014-05-16
            • 2016-06-24
            • 2019-05-24
            • 1970-01-01
            • 2021-07-12
            • 2021-10-22
            相关资源
            最近更新 更多