C http服务器编程

标签 c http networking cometd

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

最佳答案

也许您不了解 HTTP 协议(protocol)的工作原理。你应该首先记录自己更多关于它的信息。我将尝试解释如何在您的案例中使用它:

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

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

如您所见,我不是在谈论任何语言实现,而是在谈论如何偏离 HTTP 协议(protocol)来执行您想要的操作。 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:所有客户端都会收到数据。

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

关于C http服务器编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232963/

相关文章:

c - C中自增返回0?

http - 如何检测页面是否是通过重定向请求的?

java - 在 Java 中重用 ObjectOutputStreams

networking - 以有用的形式保存 H264 RTP 数据包

c++ - 是否有可能在未包含在任何其他文件中的文件中使用 extern 变量?

c - 动态 C - 字符指针、strcpy、strcat

java - 如何用 Java 编写一个非常基本的 POST 客户端

Java "Broken Pipe"错误(使用 Unirest http 包装器)

networking - 从管理员到开发

c++ - 为使用 malloc() 分配的对象数组调用构造函数