我必须在我当前的项目中创建一个服务器,但我在这个领域没有任何或很少的经验。我的问题是,我可以在我的项目中使用Asio,它只会处理普通服务器必须面对的任何问题(部分读取,多线程问题,......)?
(我的服务器必须同时处理数百个客户端)
答案 0 :(得分:4)
ASIO负责低级套接字编程和轮询代码。您仍然必须提供处理原始网络数据的所有功能。最终,每次调用读回调时,您都会从网络中获得不可预测的字节数,您可以从中获取这些字节并从中重构应用程序消息。
但实际上,就收到未指定数量的字节而言,您不必担心如何实现这一点。
多线程很简单"从某种意义上说,你可以同时多次运行ASIO处理器,但你的责任提供一个可以同时处理多次运行的读回调。
答案 1 :(得分:2)
Asio故意不是多线程的。它通过操作系统的select()
,kqueue
,epoll
或其他机制通过多路复用处理并发。
对于部分接收,没有自动方式来使TCP遵守消息边界。 Asio对此无能为力,因此您需要在应用程序级别使用一些技术来指示完成。 HTTP传统上通过在套接字完成时关闭套接字来处理这个问题,尽管它也可以预先发送消息的 size 。