【问题标题】:C http server programmingC http服务器编程
【发布时间】:2012-02-10 18:38:51
【问题描述】:

我正在尝试将数据从服务器直接推送到客户端的 php 网页。我已经用谷歌搜索过这个问题很多次了,我不想使用 ajax 推送引擎或其他东西,比如 cometD(如果你知道我在说什么)。我想知道是否有任何方法可以在我的服务器上放置一个程序,将数据发送到所有连接的客户端。我更喜欢用 c 或 c++ 或 c# 来完成,我可以自己编程我只是想如果可能的话以及如何。

【问题讨论】:

  • 如果您想使用 HTTP 执行此操作,那么轮询或彗星是您仅有的两个选择。不过,您可以用任何语言实现它们中的任何一个。

标签: c http networking cometd


【解决方案1】:

也许您没有了解 HTTP 协议的工作原理。您应该首先记录更多关于它的信息。我将尝试解释如何在您的情况下使用它:

  • 轮询:每 X 秒,客户端将请求一个包含您想要的内容的网页。这是使用 HTTP 的标准方式:客户端发送 GET,服务器发送响应。

  • 推送:每个客户端都会请求一个网页,但服务器实际上会等待您发送消息。您可以使用此 http 通道“推送”数据:客户端发送 GET,服务器等到他有响应发送

如您所见,我不是在谈论任何语言实现,只是关于如何偏离 HTTP 协议以执行您想要的操作。 Push 方法的缺点是您将为 X 客户端打开 X 套接字,即使客户端处于空闲状态也是如此。 Pull 方法不会发生这种情况,发送响应时套接字会关闭。

现在,如果您想这样做,您需要从客户端启动连接。这就是“Ajax”部分有用的地方,让我们在 jquery 中看看:

$.get('/wait_for_message', function(data) {
    alert('My server send:' + data);
})

您的服务器将收到一个GET /wait_for_message HTTP/1.1 请求。您可以将此套接字保存在“等待某事的客户端”列表中,而不是发回数据。然后,当需要时,您可以遍历此列表,将数据写入所有套接字,然后 tada:所有客户端都将接收数据。

现在这种机制并不容易做到正确,这就是为什么你可以使用另一个项目来实现它,正如其他人所提议的那样。

【讨论】:

    【解决方案2】:

    您可以用任何语言编写/修改一个非常简单的 Web 服务器,以格式化和提供来自数据库的数据,即使忽略实际请求是什么。您需要做的就是将标头和数据写入套接字。您可以通过根据一些列表主动启动连接来做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多