C语言编写HTTP服务器程序

3

我想直接从服务器向客户端的php网页推送数据。我已经搜索过很多次这个问题,我不想使用ajax推送引擎或其他东西,比如cometD(如果你知道我在说什么)。我想知道是否有任何办法在我的服务器上放置一个程序,可以向所有连接的客户端发送数据。我希望使用c、c++或c#完成此操作,我可以自己编程,只是想知道它是否可能以及如何实现。


3
如果您想使用HTTP来实现这个功能,那么轮询或长轮询是您唯一的两个选择。但是,无论哪种语言您使用,都可以实现它们。 - Flexo
2个回答

1
也许你还不了解HTTP协议的工作原理,你应该先更多地了解一下。我将尝试为您解释如何在您的情况下使用它:
  • 轮询:每X秒,客户端会请求一个包含所需内容的网页。这是使用HTTP的标准方式:客户端发送一个GET请求,服务器发送响应。

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

正如您所看到的,我没有谈论任何语言实现,只是关于如何偏离HTTP协议以实现您想要的功能。推送方法的不足之处在于,即使客户端处于空闲状态,您也将拥有X个客户端打开的X个套接字。拉动方法则不会出现这种情况,当响应发送后,套接字就会关闭。

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

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

你的服务器将会收到一个 GET /wait_for_message HTTP/1.1 请求。不要直接发送数据回去,而是可以将这个 socket 保存在一个“等待某些东西的客户端”列表中。然后在需要时,可以遍历这个列表,向所有 socket 写入数据,然后就完成了:所有客户端都会收到数据。

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


0

您可以使用任何编程语言编写/修改一个非常简单的Web服务器,从数据库中格式化和提供数据,甚至忽略实际请求是什么。您只需要向套接字编写标题和数据即可。您也可以根据某个列表主动发起连接来完成同样的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接