websocket for C++
#1 环境
C++11
boost 1.58.0
Ubuntu 16.04
cmake 3.18.2
websocketpp
#1 websocketpp 安装
websocketpp 依赖boost,需要先将boost装好
- 下载
git clone https://github.com/zaphoyd/websocketpp.git
- 编译安装
cd websocketpp
mkdir build
cd build
cmake ..
make
sudo make install
安装路径 : /usr/local/include/websocketpp
#2 使用
main.cpp
#include <iostream>
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
#include <websocketpp/config/asio_no_tls_client.hpp>
#include <websocketpp/client.hpp>
#include <functional>
typedef websocketpp::server<websocketpp::config::asio> io_server;
typedef websocketpp::client<websocketpp::config::asio_client> io_client;
class WebSocketServer {
public:
WebSocketServer() {
server.set_error_channels(websocketpp::log::elevel::all); // log
server.set_access_channels(websocketpp::log::alevel::all ^ websocketpp::log::alevel::frame_payload);
server.init_asio(); // asio init
server.set_message_handler(std::bind( // set on_message
&WebSocketServer::on_message, this,
std::placeholders::_1, std::placeholders::_2
));
server.set_open_handler(std::bind( // set on_open
&WebSocketServer::on_open, this, std::placeholders::_1)
);
server.set_close_handler(std::bind( // set on_close
&WebSocketServer::on_close, this, std::placeholders::_1)
);
server.set_fail_handler(std::bind( // set on_fail
&WebSocketServer::on_fail, this, std::placeholders::_1)
);
}
void on_message(websocketpp::connection_hdl hdl, io_server::message_ptr msg) {
std::cout << "on_message" << std::endl;
server.send(hdl, msg->get_payload(), msg->get_opcode()); // 发送消息
}
void on_open(websocketpp::connection_hdl hdl) {
std::cout << "on_open" << std::endl;
}
void on_close(websocketpp::connection_hdl hdl) {
std::cout << "on_close" << std::endl;
}
void on_fail(websocketpp::connection_hdl hdl) {
std::cout << "on_fail" << std::endl;
}
void run() {
server.listen(8888); // 端口 9002
server.start_accept();
server.run();
}
public:
io_server server;
io_client client;
};
int main() {
WebSocketServer app;
app.run();
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(wsppdemo)
set(CMAKE_CXX_STANDARD 14)
set(BOOST_ROOT "/usr/local/include/boost")
set(BOOSTROOT "/usr/local/include/boost")
include_directories(/usr/local/include)
link_directories(/usr/local/lib)
FIND_PACKAGE(Threads REQUIRED)
SET(Boost_USE_MULTITHREADED ON)
find_package(Boost REQUIRED COMPONENTS system)
add_executable(wsppdemo main.cpp)
target_link_libraries(wsppdemo boost_thread boost_system ${CMAKE_THREAD_LIBS_INIT})