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