我的情况:我想创建一个业余爱好项目来改进我的C ++,包括实时/延迟编程。
我已经决定编写一个小型Java程序,它会向客户端发送大量随机股票价格,客户端将以C ++编写并接受所有价格。
我不希望C ++客户端必须轮询/有一个while循环,它会连续检查数据,即使没有。
我有什么选择?如果使用C ++服务器更容易实现,那么这不是问题。
我认为对于初学者我将不得不使用boost ASIO包进行联网?
我将在Windows 7上执行此操作。
答案 0 :(得分:1)
为什么不让Java服务器接受连接然后等待一段时间。例如10秒在此时间内,如果数据可用,请发送并关闭连接。
然后,C ++客户端可以有一个线程,只要前一个连接完成就会打开一个连接。
如果没有新数据,那么在没有经常建立连接的情况下,应该提供相当低的延迟。
这基本上是Comet网络编程模型,用于许多应用程序。
答案 1 :(得分:1)
考虑Web服务器如何接收数据。访问URL时,数据将被推送到服务器。服务器不需要轮询客户端(或者确实知道客户端的任何信息,而不是服务器向其推送字节)。
您可以使用Java servlet通过HTTP接受数据并以这种方式编写代码。同样,boost :: asio有一个server example,可以帮助你入门。在引擎盖下,您可以启用持久性HTTP,以便不经常打开/关闭连接。这将使编码模型更加简单。
答案 2 :(得分:0)
我不希望C ++客户端必须轮询/有一个while循环 不断检查数据
有人有。
不一定是你。我从未使用过boost ASIO,但它可能会提供回调注册。如果是,那么只需使用boost注册你的回调函数,boost就会等待,并在获得一些数据时给你回电。
其他选项当然是您使用一些同步的功能。喜欢(不是真正的函数)Socket.read()
阻塞线程,直到套接字中有数据或它被关闭。但在这种情况下,你将专注于自己的主题。
- 编辑 -
Abt沟通本身。只需选择任何IPC机制(套接字/管道/文件/ ...),我已经描述了一个人。一旦发送数据,数据本身就会被“编码”和“解码”,因此您可以创建自己的协议。例如。 "%%<STOCK_NAME>=<STOCK_PRICE>##"
其中“%%”,=
和##
(标记开始,中间和结尾的标记)您在发件人方添加并在接收方删除以获取股票名称和价格。
您可以根据自己的需要进一步制定协议。就像你也可以发送买/卖推荐或文本提醒消息与主要股票交易所新闻。只要您的客户端和服务器了解数据如何“编码”,您就会很好。
最后,如果您想保护通信(并说您没有使用某些安全层(SSL)),那么您可以加密数据。但这是一个不同的章节。 :)
HTH