我经常在代码中看到这种模式,绑定shared_from_this为成员函数的第一个参数,并使用async_*函数调度结果.以下是另一个问题的示例:
void Connection::Receive()
{
boost::asio::async_read(socket_,boost::asio::buffer(this->read_buffer_),
boost::bind(&Connection::handle_Receive,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Run Code Online (Sandbox Code Playgroud)
使用shared_from_this()而不是使用的唯一原因this是在调用成员函数之前保持对象存活.但除非在某处有某种类型的增强魔法,因为this指针是类型的Connection*,所有都handle_Receive可以,并且返回的智能指针应该立即转换为常规指针.如果发生这种情况,那么没有任何东西可以让对象保持活力.当然,在呼叫中没有指针shared_from_this.
但是,我经常看到这种模式,我不敢相信它在我看来完全被打破了.当操作完成时,是否有一些Boost魔法会导致shared_ptr转换为常规指针?如果是这样,这是在某处记录的吗?
特别是,在某个地方记录共享指针将保持存在直到操作完成?调用get_pointer强指针然后在返回的指针上调用成员函数是不够的,除非强指针在成员函数返回之前不被销毁.
我正在开发一个涉及boost::beastwebsocket/http混合服务器的项目,该服务器运行在上面boost::asio.我的项目advanced_server.cpp源于示例源代码.
它工作正常,但现在我正在尝试添加一项功能,该功能需要向所有连接的客户端发送消息.
我不是很熟悉boost::asio,但是现在我看不到有任何方式可以播放"广播"事件(如果这是正确的术语).
我天真的方法是看看我是否可以构造websocket_session()附加类似事件监听器的东西,并且析构函数会分离监听器.此时,我可以触发事件,并使所有当前有效的websocket会话(websocket_session()作用域的生命周期)执行回调.
有/sf/answers/1192031571/,它或多或少地做了我想要的(ab)使用a boost::asio::steady_timer,但这似乎是一种可怕的黑客来完成应该非常简单的事情.
基本上,给定一个有状态boost::asio服务器,我如何在多个连接上进行操作?
我的 boost 服务器意外停止接受传入连接,因为我团队中的其他人在不同线程(使用不同端口)中使用 boost 接受器创建了另一个服务器?这是正常的吗?如何让两个服务器独立工作而不互相干扰?
已解决:接受器与此无关,这家伙在某个地方启动了无限循环,阻塞了其他组件。我想这就是当团队工作不协调时会发生的情况:( 对不起,伙计们,sehe 一如既往地是最好的