4

我正在尝试使用 AppWeb 开源 Web 服务器开发交互式聊天应用程序。
我需要有一些机制使 Web 服务器能够向客户端发送更新的消息,这样当远程用户发送消息时,客户端会自动更新。

有一些方法可以使用 HTML5 Web Sockets 和服务器发送事件来做到这一点。
但是我们只需要在 HTML 和 JavaScript 中实现它,而不是 HTML5。

所以我需要一些池化机制来持续为新事件池化我的 Web 服务器。

那么我应该如何使用 Sockets 在 Javascript 中编写池机制。
它应该如何在服务器端实现?

谢谢!

4

2 回答 2

3

已经有一些例子......根据服务器端,您可以选择java-hello-worldphp-hello-world或......

如果您不能使用websocket,则必须采用旧方式,创建一个间隔window.setInterval并使用例如从服务器中提取数据。$.ajax(). 我不知道双向连接(websocket)的任何其他替代方案......kayahrs回答

正如您所要求的:
$.ajax()是执行xhr的jQuery方式。基本上,它向服务器发出一个异步请求,该请求返回 xml 或 json 或 text 或 ...(随便)。当此请求返回时,支持的 eventHandler 会被触发,您可以对响应做出反应。您也可以使用普通的 xhr,但处理原始 xhr 有点尴尬。 jQuery 支持一些速记重载,例如。, , ...
$.ajax()$.getJSON()$.get()

示例实现:

$.get("test.cgi", function(data){
    alert("Data Loaded: " + data);
});
于 2011-04-21T06:14:52.537 回答
2

还有另一种技术可以将消息从服​​务器发送到客户端。为此,您必须使用 iframe 连接到不会关闭连接的 PHP 脚本(或您在服务器端使用的任何技术)。然后,每当必须通知客户端某事时,PHP 脚本就会发送 JavaScript 消息。在每条消息之后,服务器刷新输出流以强制数据真正找到到达客户端的方式并且不被某些输出缓冲区缓存。下面是在 iframe 中加载的 PHP 脚本的一个小示例代码(未经测试且不完整,只是为了展示基础知识):

<html>
  <body>
    <script type="text/javascript">

      function receiveMsg(data)
      {
          // Do something with the data, for example send it to some function
          // in the parent frame (Where your chat application lives)
      }

      <?php

      while (true) // You may also implement some abort state which should
                   // be checked here
      {
          $data = waitForData(); // This is your magic function on the server
                                 // which waits for data to be send to the client
          echo "receiveMsg('" . $data . "');"; // Let's say data is just a string.
                                             // You may want to use JSON instead
          flush();
      }
      ?>
    </script>
  </body>
</html>

这种方法的优点是它不依赖轮询。因此,您不必每 x 秒向服务器发送一次请求。当你在服务器端做正确的事情时,一个用户发送的消息会尽快被其他用户接收,而不是 x 秒后。缺点是每个聊天用户都有一个永久的 HTTP 连接。但这可能需要更少的服务器资源,然后每个聊天用户每分钟有几十个完整的 HTTP 请求。

于 2011-04-21T06:39:37.563 回答