使用Boost Asio库打开多个端口
Opening multiple ports using Boost Asio libraries
我是Boost Asio库的新手,我的要求是构建一个服务器,它应该异步侦听600个不同的端口(TCP通信)。有人能给我推荐一个使用Boost Asio实现这一目标的聪明方法吗。我尝试过使用Boost Asio文档中提供的echo服务器示例,但无法真正理解boost::asio::io_service io_seervice;
using namespace std; // For atoi.
for(long port=50000;port<=50600;port++)
{
server s(io_service, port);
io_service.run();
}
有人能阐明这一点吗?
io_service
负责处理分配给它的所有I/O;您不需要为每个端口创建一个单独的实例。对于您要做的事情,您需要创建600个单独的服务器实例,然后调用io_service.run()
。
vector<shared_ptr<server> > servers;
for (uint16_t port = 50000; port != 50600; ++port)
{
servers.push_back(shared_ptr<server>(new server(io_service, port)));
}
io_service.run();
尝试一些类似的方法
boost::asio::ip::tcp::socket socket(io_service);
socket.async_connect(endpoint, connectHandler);
socket
变量是单个套接字的实例,对async_connect
的调用将建立到endpoint
定义的位置的异步连接。您可以以类似的方式执行对socket
的异步读取和写入,只需确保io_service.run()
在某个线程中运行,否则异步调用(和关联的回调)将不会执行。。。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?