我有一个HTTP-ZeroMQ网关,它在一端接受POST请求并在Zmq上转发它们,然后将响应路由回来。
http服务器与Boost.ASIO和Beast完成异步,并在6个线程的线程池上运行。通过从多个线程调用io_service.run()
来完成线程池。 zmq部分非常天真:对于每个http请求,它创建一个新的REQ(tcp)套接字并同步等待响应。
这显然性能很差,因为它为每个请求创建了一个新的zmq / tcp链接,并且处理线程被阻塞直到响应到达(2-3秒)。我想使zmq部分同步,但我有一些问题。有一个相当简单的方法可以使zmq套接字ASIO友好(here和here),我更关心线程,因为zmq文档建议仅使用来自创建线程的套接字。
我有三个选择:
服务器也进行一些数据处理,所以我不想让它成为单线程。
那么,任何想法如何在多线程ASIO应用程序中优雅地处理zmq套接字异步?
ps:我确实看到了AZMQ,但我现在不想再引入另一个第三方库。