python实现的epoll异步服务器接收数据不全怎么解决

python实现的epoll异步服务器接收数据不全怎么解决,第1张

因为tcp socket只是传送一个段连续的数据流,如果你write: selftransportwrite('Z')selftransportwrite('Z')selftransportwrite('Z')因为三个write是连续的,所以对socket来说,它要传的就是用hex表示的'5a 5a 5a'这样一段数据

可以用WINDOWS完成端口(等同于Linux下的epoll模型)来实现你的需求,以下是简介:
Win32重叠I/O(Overlapped I/O)机制允许发起一个 *** 作,然后在 *** 作完成之后接受到信息。对于那种需要很长时间才能完成的 *** 作来说,重叠IO机制尤其有用,因为发起重叠 *** 作的线程 在重叠请求发出后就可以自由的做别的事情了。在WinNT和Win2000上,提供的真正的可扩展的I/O模型就是使用完成端口(Completion Port)的重叠I/O完成端口---是一种WINDOWS内核对象。完成端口用于异步方式的重叠I/0情况下,当然重叠I/O不一定非使用完成端口不 可,还有设备内核对象、事件对象、告警I/0等。但是完成端口内部提供了线程池的管理,可以避免反复创建线程的开销,同时可以根据CPU的个数灵活的决定 线程个数,而且可以让减少线程调度的次数从而提高性能其实类似于WSAAsyncSelect和select函数的机制更容易兼容Unix,但是难以实现 我们想要的“扩展性”。而且windows的完成端口机制在 *** 作系统内部已经作了优化,提供了更高的效率。所以,我们选择完成端口开始我们的服务器程序的 开发。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12721214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存