使用websocketpp实现websocket服务端

简介

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

使用

websocketpp,依赖boost库,安装boost

yum install boost 
yum install boost-devel

安装websocketpp

地址: https://github.com/zaphoyd/websocketpp

mv websocketpp /usr/include

编写程序websocket.cpp

#include <iostream>
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>

using namespace std;

typedef websocketpp::server<websocketpp::config::asio> websocketsvr;
typedef websocketsvr::message_ptr message_ptr;

using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;

void OnOpen(websocketsvr *server,websocketpp::connection_hdl hdl){
    cout<<"have client connected"<<endl;
}

void OnClose(websocketsvr *server,websocketpp::connection_hdl hdl){
    cout<<"have client closed"<<endl;
}

void OnMessage(websocketsvr *server,websocketpp::connection_hdl hdl,message_ptr msg){
    server->send(hdl, msg->get_payload(), websocketpp::frame::opcode::text);
}

int main(){
    websocketsvr server;
    server.set_access_channels(websocketpp::log::alevel::all);
    server.clear_access_channels(websocketpp::log::alevel::frame_payload);
    server.init_asio();
    // Register our open handler
    server.set_open_handler(bind(&OnOpen, &server, ::_1));
    // Register our close handler
    server.set_close_handler(bind(&OnClose, &server, _1));
    server.set_message_handler(bind(&OnMessage,&server,_1,_2));
    server.listen(7999);
    server.start_accept();
    server.run();
}

编译程序g++ websocket.cpp -o websocket -lboost_system -std=c++11 -g

参考资料

https://baike.baidu.com/item/WebSocket/1953845

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值