通过http将数据从服务器推送到浏览器

时间:2009-12-23 08:56:21

标签: asp.net wcf iis keep-alive

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

// 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

5 个答案:

答案 0 :(得分:2)

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

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

也许你想看一些Comet implementations

答案 1 :(得分:2)

服务器无法启动与客户端的通信。因此服务器无法将数据推送到客户端。但是你可以使用“反向AJAX”来实现推送机制。以下文章应该有所启发。

Reverse AJAX

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

彗星是另一种选择 - 但这基本上只是长时间的轮询仍然来自客户端脚本。

答案 4 :(得分:0)

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

  

它只是长寿的AJAX   电话,并将回应客户   如果有预期的事件发生   在服务器端,否则它会停留   冷静。这个Comet(编程)   维基百科文章解释了更多关于   方法

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