gpt4 book ai didi

sockets - Boost 中的单线程服务器

转载 作者:行者123 更新时间:2023-12-03 11:55:56 25 4
gpt4 key购买 nike

我有一个服务器类,它将启动两个线程,一个是接受所有传入的连接并将这些套接字放入一个向量中。另一种是扫描这个套接字向量,找出哪个被读为读/写,然后做一些事情。

所以问题是在第二个线程(成员函数)中,我如何实际扫描这些套接字?

人们建议使用 unix socket 的 select() 但我决定在任何地方都使用 boost,所以我正在寻找 boost 中的解决方案。

我已经阅读了 boost.org 和这个站点的一些文档。人们说 io_service 是 select 的抽象。我不明白。我只是绑定(bind)函数/对象然后使用 io_service::post() 将它们放入队列并使用 io_service::run() 执行吗?

更新,在我的理解中,每次你使用包含 io_service 对象的构造函数实例化一个新的套接字对象时,这个套接字对象都会与 io_service 对象相关联,因为我只有一个 io_service 对象,所以当我调用 io_service 时会执行这些套接字对象。跑()

但是,问题是,我如何将 handle_function 分配给那些套接字,我看到人们使用
acceptor.async_accept(socket, boost::bind(handler, &socket)) 像这样,但是我想用accept而不是async_accept(),但是accept()函数不能用来绑定(bind)一个handler函数到这个socket

我该怎么办?

class Server
{
io_service IOService;

std::vector<boost::....::socket> SocketVector;

listen()

{
//blockingly accept all incoming connection and bind socket with handler function;
}

process HandleRequest()
{
//io_service.run()
}
}
int main()
{
Server myServer;
boost::thread thread1(&Server::listen, &myServer);
boost::thread thread2(&Server::HandleRequest, &myServer);
}

最佳答案

您的设计听起来过于复杂,可能无法与 Boost Asio 很好地集成。是的,您可以为每个套接字使用一个线程,但是 falls apart quickly当有多个并发连接时。

我建议重新考虑您的设计并将其基于异步操作。学习 the examples包含在 asio 文档中。 中也有大量信息。标签。

关于sockets - Boost 中的单线程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15881461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com