厦门广告公司网站建设,小程序与app,人才网站建设策划书,怎么看一个网站谁做的优化增加发送节点 构造发送节点#xff0c;管理发送数据。发送节点的类如下。 这个发送节点用于保证发送和接收数据的有效性。
增加发送队列 前边实现的是一个简单的echo服务器#xff0c;也就是服务器将收到的内容发送给对应的客户端。但是在实际的服务器设计中#xff0c;服务…增加发送节点 构造发送节点管理发送数据。发送节点的类如下。 这个发送节点用于保证发送和接收数据的有效性。
增加发送队列 前边实现的是一个简单的echo服务器也就是服务器将收到的内容发送给对应的客户端。但是在实际的服务器设计中服务器是全双工工作的也就是说服务器会一直监听客户端的写事件而在发送的过程中是可以在任意的时刻发送的。也就是说实现全双工通信需要对服务器的收发进行分离。 对于异步收发也就是要实现一个读接口和写接口。但是对于boost::asio会有一个问题就是当调用async_read_some或者async_read_write的时候由于tcp的缓冲区不够会导致发送或者接收数据的时序错乱。大家可以参考我的这篇博客boost asio异步api1_asio 异步http服务端-CSDN博客 因此我们需要维护一个发送队列保证发送的时序性。但是作为服务器的发送队列还需要考虑安全性就是当多个客户端的线程来访问时的安全性。服务器调用发送接口基本上都是逻辑线程和boost::asio返回的网络线程不是一个线程所以还应该给发送队列增加一把互斥锁保证安全性。 改造发送接口 这里需要介绍一下std::lock_guard这个类这是c11的新特性这里的泛型是std::mutexsend_lock是std::mutex的锁这里生成的lock会随着作用域的结束自动解锁。 改造接收接口 完整代码如下
codes-C: C学习 - Gitee.com
这里的服务器虽然实现了收发分离但还是有缺陷比如粘包问题。