我使用 websocketpp 库设置了一个简单的广播服务器,用于个人 HTML + Javascript 聊天。到目前为止,一切都很完美,只有一个例外。此聊天仅供两个人同时使用。如果第三个人试图进来,他或她必须关上门。所以,逻辑是:
1 -> 服务器正在监听。
2 -> 爱丽丝连接。
3 -> Bob 连接。
4 -> 服务器停止监听。向 Alice + Bob 广播。
5 -> Carlos 尝试连接,但端口已关闭。
6 -> Bob 断开连接。
7 -> 卡洛斯连接。
8 -> 服务器停止监听。向 Alice + Carlos 广播。
起初我认为这会很简单,但在许多错误和阅读之后,我只是卡住了。我可以让我的服务器在握手过程之后停止监听,但是在此之后message_handler
服务器端停止工作并且我无法从客户端收到任何消息,即使客户端仍然完全连接。我知道set_validate_handler
并且我已经设置为同时只允许两个连接,但是服务器仍然在监听。我需要的是一种让服务器停止监听端口的方法。
我正在尝试关闭监听并以这种方式保持已经建立的连接:
void on_open( connection_hdl hdl )
{
// Insert
m_connections.insert( hdl );
// Stop listening
m_server.stop_listening();
}
但是,它给了我以下输出:
[2015-07-12 17:06:47] [connect] WebSocket Connection [::1]:58589 v13 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36" / 101
[2015-07-12 17:06:47] [fail] WebSocket Connection Unknown - "" - 0 websocketpp:26 Operation canceled[2015-07-12 17:06:47] [info] Error getting remote endpoint: system:10009 (The file handle supplied is not valid)
[2015-07-12 17:06:47] [info] asio async_shutdown error: system:10009 (The file handle supplied is not valid)
remote_endpoint: The file handle supplied is not valid
客户端甚至无法连接。否则,如果我m_server.stop_listening();
在建立连接后使用 ,客户端仍保持完美连接,但服务器停止接收其消息,或者至少我无法在void on_message( connection_hdl hdl, server::message_ptr msg )
.