Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost asio服务器_C++_Boost_Boost Asio - Fatal编程技术网

C++ Boost asio服务器

C++ Boost asio服务器,c++,boost,boost-asio,C++,Boost,Boost Asio,关于以下问题的答复: 如果我有一个服务器,它可以进行计算,同时从客户端发送/接收数据包,该怎么办 我的意思是,如果我正在编写一个http服务器,答案上的示例就足够了,因为所有发送的数据都是接收到的数据的函数 假设我的程序计算值并需要根据客户的需要更新客户机(有些可能需要更新频率1 hz,而另一个可能需要更新频率10 hz等) 这种结构对我很有帮助: while(1){ pollNetworking(); //<- my function value1 += 5; value2 = rand

关于以下问题的答复:

如果我有一个服务器,它可以进行计算,同时从客户端发送/接收数据包,该怎么办

我的意思是,如果我正在编写一个http服务器,答案上的示例就足够了,因为所有发送的数据都是接收到的数据的函数

假设我的程序计算值并需要根据客户的需要更新客户机(有些可能需要更新频率1 hz,而另一个可能需要更新频率10 hz等)

这种结构对我很有帮助:

while(1){
pollNetworking(); //<- my function
value1 += 5; value2 = random();
}
while(1){

pollNetworking();//您仍然可以使用异步接受和接收,但在需要发送给客户端时,可以同步发送给客户端


如果您可以为每个连接的客户端使用单独的线程(我猜您不会期望有成百上千个连接)然后,您可以为每个连接的客户端使用一个线程进行计算和发送,同时保持接收异步。

服务器可以在从客户端发送和接收数据的同时进行计算。但是,可能需要保护缓冲区和套接字不受并发访问

对于大多数Boost.Asio操作,可移植超时功能仅在异步操作上可用。这需要对实体发出异步操作,设置计时器,然后等待。有关使用超时取消
async\u read
的示例,请参阅问题

最简单、可扩展性较差的方法是为每个职责指定一个线程(每个套接字、接受和计算的线程)。可能需要进行同步,例如保护计算结果。例如,如果
value1
value2
仅在同一次迭代中有意义,则套接字线程需要确保将值一起写入,而计算线程不会在写入过程中更改值。各种同步可以使用上的构造(如提供的构造)来实现这一点。此外,通过最小化使用的异步调用量,实现和调试可能更容易

对于一种更具可扩展性的方法,大多数程序将被编写为一系列从异步操作调用的处理程序。这使得程序更容易利用线程和线程池。但是,它可以将程序逻辑分散到许多函数中,并且很快变得难以遵循。通常情况下,progra以异步操作编写的ms将通过执行同步和管理对象生命周期

实现的难易程度取决于经验。请记住,网络编程、并发和异步操作天生就很困难。很少有既简单又完整的解决方案