2009-12-23 115 views
4

在一般聊天应用程序中,客户端浏览器始终轮询服务器以检查新消息。通过http将数据从服务器推送到浏览器

// 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流模块的理解不够,我需要你的建议来实现这个想法。

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

UPDATE(3年后):

这正是我一直在寻找: Microsoft ASP.NET SignalR

回答

2

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

但是您可以检查服务器是否有新消息,比方说,3秒钟并刷新您的客户端界面。

也许你想看看一些Comet implementations

+0

一个很好的资源。谢谢。 – 2009-12-23 09:10:06

0

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

+0

的任何链接? – 2009-12-23 09:05:56

+0

以下代码演示了它 - http://www.codeproject.com/KB/custom-controls/CometMultiClient.aspx – Devi 2009-12-23 09:14:19

0

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

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

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

2

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

Reverse AJAX

0

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

它只不过是长期生活AJAX 电话,将向客户 回应,如果有一个预期的事件在服务器端发生 ,否则它保持 平静。这颗彗星(编程) 维基百科的文章介绍了更多关于 的办法

我已经在这里asp-net-chat-with-wcf answerd类似的问题。请退房

相关问题