如何实现一次只为1个客户端提供服务的WebSocket服务器

时间:2015-05-31 14:45:23

标签: c++ websocket websocket++

我使用WebSocket ++库来实现WebSocket服务器。

由于我的服务器的特性,我希望它一次只能服务一个客户端。也就是说,一旦客户端连接到我的服务器,我希望它停止从其他潜在客户端收听,直到已经连接的客户端断开连接。

目前我的服务器如下:

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();
}

我应该如何暂停和恢复监听,还是有任何限制并发客户端数量的参数?

1 个答案:

答案 0 :(得分:2)

使用validate决定何时接受或拒绝连接:

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));