获取网页与C ++应用程序通信

时间:2012-02-17 23:49:23

标签: php c++ html5 tcp websocket

我想要实现的是让网页向C ++应用程序发送消息,但这需要从C ++到Web服务器以及从Web服务器到客户端的某种形式的连接。

我想到的一种方法是拥有一个存储消息的MySQL数据库,而C ++应用程序使用libCURL通过php脚本向Web服务器询问任何新消息。它必须每隔一秒左右轮询一次,这有点浪费。此外,每当您想要从网页发送消息时,您都必须将表单提交回Web服务器,这将会很慢。

我也在查看HTML5 websockets,认为可能在客户端和C ++应用程序之间创建TCP连接,但我不认为它们是如何工作的。 websockets是设计用于通过服务器在两个HTML5应用程序之间路由消息,还是理论上可以使用HTML5应用程序直接与服务器通信(可能运行php脚本,或发送正常的TCP数据包)?

对我如何实现这一目标的任何建议都会受到欢迎。

感谢。

3 个答案:

答案 0 :(得分:3)

如果您想从您的网站进行远程过程调用,我建议您查看SOAP。 SOAP工作正常with PHP,而gSOAP可以很容易地将服务器接口嵌入到C ++应用程序中,反之亦然。

如果你的应用程序只有非常简单的消息,你的数据库想法也会起作用,但是你的应用程序必须继续检查是否有新的消息可用(这意味着很多不必要的流量,在至少,如果你的数据库与你的应用程序不在同一台机器上),你必须自己处理这些检查,提出模型等。

另一方面,SOAP将您的数据直接发送到您的服务器应用程序,并隐式处理类型安全或序列化等所有令人讨厌的内容。

您可以找到大量文档和示例,从World Wide Web Consortium巧妙地解释SOAP的定义方式及其工作原理。还有各种如何在gSOAP的User Guide中用C ++设置SOAP服务器的例子。

答案 1 :(得分:2)

如果您正在编写C ++程序,您可以编写它来使用CGI,以便您的Web服务器将您的C ++程序作为“脚本”来处理相关的http请求,您将直接输出http响应来自你的C ++程序。

http://en.wikipedia.org/wiki/Common_Gateway_Interface

答案 2 :(得分:1)

这不是很容易。你应该看看谷歌的解决方案:

称为Cloud to Device Messaging Framework,用于向Android设备发送消息。

你在做什么叫做Push。 Here is a video on this from Google IO.

只需将您的c ++应用程序视为Android设备。

您的C ++应用程序将通过某个tcp / ip端口连接到您创建的服务,只等待连接。您的应用会告诉服务器运行该应用的用户的ID,或者如果它是多播,您的应用只会等待服务给它一条消息。

您的网络服务器可以使用进程间通信,命名管道,命名互斥锁等来单独使用您的服务,以便在所有打开的TCP / IP连接上发送消息。