我正在尝试将数据从服务器直接推送到客户端的 php 网页。我已经用谷歌搜索过这个问题很多次了,我不想使用 ajax 推送引擎或其他东西,比如 cometD(如果你知道我在说什么)。我想知道是否有任何方法可以在我的服务器上放置一个程序,将数据发送到所有连接的客户端。我更喜欢用 c 或 c++ 或 c# 来完成,我可以自己编程我只是想如果它可能以及如何。
2 回答
也许您没有了解 HTTP 协议的工作原理。您应该首先记录更多关于它的信息。我将尝试解释如何将它用于您的案例:
轮询:每 X 秒,客户端将请求一个包含您想要的内容的网页。这是使用 HTTP 的标准方式:客户端发送 GET,服务器发送响应。
Push:每个客户端都会请求一个网页,但服务器实际上会等待您发送消息。您可以使用此 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:所有客户端都将接收数据。
现在这种机制不容易做到正确,这就是为什么你可以使用另一个项目来实现它,正如其他人所提议的那样。
您可以用任何语言编写/修改一个非常简单的 Web 服务器,以格式化和提供来自数据库的数据,即使忽略实际请求是什么。您需要做的就是将标头和数据写入套接字。您可以通过根据某些列表主动启动连接来做同样的事情。