C++ websocketspp/websockets&x2B+;要存储作为参数传递的处理程序吗

C++ websocketspp/websockets&x2B+;要存储作为参数传递的处理程序吗,c++,websocket,C++,Websocket,我需要有关websocketspp/websockets++的帮助,请() 我愿意使用其他更简单的库,也可以使用C,如果这是一个更好的选择:) 我的总体目标是用websockets网页代替DikuMUD的telnet客户端 我一直在使用运行良好的“echo_服务器”示例 我试图从一个回调中保存连接处理程序“hdl”,然后在以后重新使用它将另一条消息发送回客户端。在我看来,hdl是一个类,每次调用函数(例如on_消息)都会在堆栈上创建/销毁它 我希望以某种方式存储hdl,例如在std::map中,

我需要有关websocketspp/websockets++的帮助,请()

我愿意使用其他更简单的库,也可以使用C,如果这是一个更好的选择:)

我的总体目标是用websockets网页代替DikuMUD的telnet客户端

我一直在使用运行良好的“echo_服务器”示例

我试图从一个回调中保存连接处理程序“hdl”,然后在以后重新使用它将另一条消息发送回客户端。在我看来,hdl是一个类,每次调用函数(例如on_消息)都会在堆栈上创建/销毁它

我希望以某种方式存储hdl,例如在std::map中,以便我可以查找它并使用该查找的hdl稍后向同一客户机发送另一条消息

下面是一个例子。对不起,我已经习惯了C和轻量级C++:

std::map g_cMapHandler;
//定义回调以处理传入消息
消息无效(服务器*s、websocketpp::连接\u hdl、消息\u ptr msg)
{
void*myExample=0;//我需要能够检索的值
//在这里使用&hdl没有意义,我认为当on_消息结束时hdl会被破坏。
g_cMapHandler[&hdl]=myExample;
//但我不知道什么真正代表了hdl?也许有一个fd/文件描述符
//我可以以某种方式存储,然后如何从中重建hdl?
}

谢谢:-)

连接\u hdl本身就是一个指针,存储
连接\u hdl
。这是一个弱指针

通常,建议使用asio避免
void*
,并使用引用计数智能指针。即使您可以在同步程序中控制对象的生存期,并在需要时调用
free
delete
,但在异步程序中,流是变化的,因此每次释放指针的正确位置可能不同


asio可以使用
boost::weak_ptr
std::weak_ptr
boost
one拥有
operator感谢Alex,太棒了,最后一个例子救了我:-)永远不会明白这一点。现在需要看一个C++教程;
std::map<void *, void *> g_cMapHandler;

// Define a callback to handle incoming messages
void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg)
{
    void *myExample = 0; // A value I need to be able to retrieve 

    // Using &hdl here doesn't make sense, I presume hdl gets destroyed when on_message ends.
    g_cMapHandler[&hdl] = myExample;

    // But I can't figure out what really represents hdl? Maybe there a fd / file descriptor
    // I can store somehow, and then how do I rebuild a hdl from it?
}
std::map<websocketpp::connection_hdl, void *, std::owner_less<websocketpp::connection_hdl>> g_cMapHandler;