c++如何接受服务器推送数据

C++ how to accept server-push data?

本文关键字:数据 服务器 何接受 c++      更新时间:2023-10-16

我的情况:我想创建一个业余项目来改进我的c++,包括实时/延迟编程。

我已经决定写一个小Java程序,它将发送大量随机股票价格给客户端,客户端将用c++编写并接受所有价格。

我不希望c++客户端必须轮询/有一个while循环,它连续检查数据,即使没有。

我有什么选择?如果有一个c++服务器更容易完成,那么这不是问题。

我想对于初学者来说,我将不得不使用boost ASIO包进行联网?

我将在windows 7上这样做。

为什么不让Java服务器接受连接,然后等待一段时间呢?例如:10秒。在此时间内,如果数据可用,发送它并关闭连接。

然后c++客户端可以有一个线程,当前一个线程完成时打开一个连接。

在没有新数据的情况下,不需要经常创建连接,这样可以提供很低的延迟。

这基本上是Comet web编程模型,用于许多应用程序。

想想web服务器是如何接收数据的。当访问URL时,数据被推送到服务器。服务器不需要轮询客户端(或者确实知道客户端的任何信息,除了它是一个向它推送字节的服务)。

您可以使用Java servlet通过HTTP接受数据,并以这种方式编写代码。类似地,boost::asio提供了一个服务器示例,可以帮助您入门。在底层,您可以启用持久HTTP,这样连接就不会频繁地打开/关闭。

我不希望c++客户端必须轮询/有一个while循环连续检查数据

总得有人。

不必是你。我从未使用过boost ASIO,但它可能提供回调注册。如果是,那么只需在boost中注册一个回调函数,boost将完成等待,并在获得一些数据时给您回调。

另一个选择当然是使用一些同步的函数。像(不是一个真正的函数)Socket.read()阻塞线程,直到有数据在套接字或它被关闭。但在这种情况下,你是在奉献一个你自己的线程。

——编辑——

关于通信本身。只要选择IPC机制(套接字/管道/文件/…),我想有人已经描述过了。一旦您发送数据,数据本身就由您"编码"answers"解码",因此您可以创建自己的协议。例如"%%<STOCK_NAME>=<STOCK_PRICE>##",其中"%%",=##(标记开始,中间和结束),您在发送方添加并在接收方删除以获得股票名称和价格。

您可以根据需要进一步开发协议。就像你也可以发送买入/卖出建议,或者发送主要股票交易所新闻的短信提醒。只要你的客户端和服务器理解数据是如何"编码"的,你就可以了。

最后,如果您想要保护通信(并且说您没有使用某些安全层(SSL)),那么您可以加密数据。但那是另一个章节了。:)

HTH

相关文章: