如何使用JavaScript与Web服务器交互

How to interact with Web server using JavaScript

本文关键字:服务器 交互 Web 何使用 JavaScript      更新时间:2023-09-26

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

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

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

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

谢谢!

已经有一些例子了…根据服务器端的不同,您可以选择java-hello-world或php-hello-world或…

如果你不能使用websocket,你必须可以走旧的方式,通过window.setInterval创建一个间隔,并使用eg从服务器提取数据。$.ajax()我不知道任何其他替代双向连接(websocket)…见kayahr的回答

如你所愿:
$.ajax()是用jQuery实现xhr的方法。基本上,它向服务器发出异步请求,服务器返回XML或json或文本或…(不管)。当这个请求返回时,支持的eventandler被触发,你可以对响应做出反应。您也可以使用普通的xhr,但是处理原始的xhr有点笨拙。
jQuery支持$.ajax()的一些简写重载,例如。$.getJSON(), $.get(),…

样本实现:

$.get("test.cgi", function(data){
    alert("Data Loaded: " + data);
});

还有另一种技术可以将消息从服务器发送到客户机。你必须使用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请求。