2015-05-31 42 views
1

我正在使用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

代替_stop listening_,當你處理不同的連接時,你可以拒絕額外的接受(只是不要調用它)。 –

回答

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)); 
相關問題