#include #include #include #include #include using std::cout; using std::endl; typedef websocketpp::server wsserver_t; void http_callback(wsserver_t *srv, websocketpp::connection_hdl hdl) { wsserver_t::connection_ptr conn = srv->get_con_from_hdl(hdl); std::cout << "body: " << conn->get_request_body() << std::endl; websocketpp::http::parser::request req = conn->get_request(); std::cout << "method: " << req.get_method() << std::endl; std::cout << "uri: " << req.get_uri() << std::endl; // 响应一个hello world页面 std::string body = "

Hello World

"; conn->set_body(body); conn->append_header("Content-Type", "text/html"); conn->set_status(websocketpp::http::status_code::ok); } void wsopen_callback(wsserver_t *srv, websocketpp::connection_hdl hdl) { cout << "websocket握手成功" << std::endl; } void wsclose_callback(wsserver_t *srv, websocketpp::connection_hdl hdl) { cout << "websocket连接关闭" << endl; } void wsmessage_callback(wsserver_t *srv, websocketpp::connection_hdl hdl, wsserver_t::message_ptr msg) { wsserver_t::connection_ptr conn = srv->get_con_from_hdl(hdl); cout << "wsmsg: " << msg->get_payload() << endl; std::string rsp = "[client]# " + msg->get_payload(); conn->send(rsp, websocketpp::frame::opcode::text); } int main() { // 1. 实例化server对象 wsserver_t wssrv; // 2. 设置日志等级 wssrv.set_access_channels(websocketpp::log::alevel::none); // 3. 初始化asio调度器 wssrv.init_asio(); // 4. 设置回调函数 wssrv.set_http_handler(std::bind(http_callback, &wssrv, std::placeholders::_1)); wssrv.set_open_handler(std::bind(wsopen_callback, &wssrv, std::placeholders::_1)); wssrv.set_close_handler(std::bind(wsclose_callback, &wssrv, std::placeholders::_1)); wssrv.set_message_handler(std::bind(wsmessage_callback, &wssrv, std::placeholders::_1, std::placeholders::_2)); // 5. 设置监听端口 wssrv.listen(8080); wssrv.set_reuse_addr(true); // 6. 开始获取新连接 wssrv.start_accept(); // 7. 启动服务器 wssrv.run(); return 0; }