4

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

// 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 关于在 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

4

5 回答 5

2

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

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

也许你想看看一些Comet 的实现

于 2009-12-23T09:02:52.657 回答
2

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

反向 AJAX

于 2009-12-23T09:08:22.670 回答
0

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

它只不过是长期存在的 AJAX 调用,如果服务器端发生预期事件,它将响应客户端,否则它会保持冷静。这篇 Comet(编程)维基百科文章解释了有关该方法的更多信息

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

于 2009-12-23T09:39:43.067 回答
0

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

于 2009-12-23T09:03:09.037 回答
0

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

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

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

于 2009-12-23T09:04:47.627 回答