代码之家  ›  专栏  ›  技术社区  ›  Anwar Chandra

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

  •  4
  • Anwar Chandra  · 技术社区  · 16 年前

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

    // 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 回复  |  直到 13 年前
        1
  •  2
  •   Rubens Farias    16 年前

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

    也许你想看看 Comet implementations

        2
  •  2
  •   Hemanshu Bhojak    16 年前

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

    Reverse AJAX

        3
  •  0
  •   Devi    16 年前

        4
  •  0
  •   RickNZ    16 年前

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

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

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

        5
  •  0
  •   Community Mohan Dere    9 年前

    它只不过是长寿的阿贾克斯 呼叫,并将回复客户 如果发生预期事件 在服务器端,否则它将保留 平静的这颗彗星(编程) 方法

    asp-net-chat-with-wcf . 请退房