C++ 如何实现一个WebSocket服务器一次只为一个客户机服务
我正在使用WebSocket++库来实现WebSocket服务器 由于我的服务器的特点,我希望它一次只服务一个客户端。也就是说,一旦客户机连接到我的服务器,我希望它停止侦听其他潜在客户机,直到已经连接的客户机断开连接 当前我的服务器看起来像:C++ 如何实现一个WebSocket服务器一次只为一个客户机服务,c++,websocket,websocket++,C++,Websocket,Websocket++,我正在使用WebSocket++库来实现WebSocket服务器 由于我的服务器的特点,我希望它一次只服务一个客户端。也就是说,一旦客户机连接到我的服务器,我希望它停止侦听其他潜在客户机,直到已经连接的客户机断开连接 当前我的服务器看起来像: typedef websocketpp::server<websocketpp::config::asio> server; static void onReceiveData(server *s, websocketpp::connectio
typedef websocketpp::server<websocketpp::config::asio> server;
static void onReceiveData(server *s, websocketpp::connection_hdl hdl, server::message_ptr msg)
{
std::string payload(msg->get_payload());
// process inside payload
websocketpp::lib::error_code ec;
s->send(hdl, payload, websocketpp::frame::opcode::BINARY, ec);
}
int main(void)
{
server myServer;
myServer.init_asio();
myServer.set_message_handler(websocketpp::lib::bind(&onReceiveData, &myServer, websocketpp::lib::placeholders::_1, websocketpp::lib::placeholders::_2));
myServer.listen(9002);
myServer.start_accept();
myServer.run();
}
typedefwebsocketpp::server;
接收数据时静态无效(服务器*s、websocketpp::连接\u hdl hdl、服务器::消息\u ptr msg)
{
字符串有效载荷(msg->get_payload());
//进程内部有效载荷
websocketpp::lib::error_code ec;
s->send(hdl、有效负载、websocketpp::frame::opcode::BINARY、ec);
}
内部主(空)
{
服务器myServer;
myServer.init_asio();
设置消息处理程序(websocketpp::lib::bind(&onReceiveData,&myServer,websocketpp::lib::placeholders:::_1,websocketpp::lib::placeholders::_2));
myServer.listen(9002);
myServer.start_accept();
myServer.run();
}
我应该如何暂停并恢复监听,或者是否存在限制并发客户端数量的参数?使用
验证
来决定何时接受或拒绝连接:
static bool accept_new_connections = true;
bool validate(server *, websocketpp::connection_hdl) {
return accept_new_connections;
}
void on_open(server *, websocketpp::connection_hdl hdl) {
accept_new_connections = false;
}
void on_close(server *, websocketpp::connection_hdl hdl) {
accept_new_connections = true;
}
显然,要完成上述工作,您需要为打开、关闭和验证设置其他处理程序:
myServer.set_open_handler(bind(&on_open, &echo_server, ::_1));
myServer.set_close_handler(bind(&on_close, &echo_server, ::_1));
myServer.set_validate_handler(bind(&validate, &echo_server, ::_1));
在当前处理不同的连接时,您可以拒绝额外的接受(只是不调用它),而不是停止侦听。