c++如何接受服务器推送数据
C++ how to accept server-push data?
我的情况:我想创建一个业余项目来改进我的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
- 将相机数据从服务器实时流式传输到客户端
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- Arduino UNO+SIM800L-向服务器发送数据
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- Java 客户端C++服务器数据发送/接收问题
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 在 MySQL 中运行 HTTP 服务器以从客户端接收数据
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- 通过TCP将数据从C++客户端发送到JSON服务器
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- C++中从客户端到服务器的数据传输问题
- Qt TCP服务器不从客户端读取数据
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应