WebSocket使用(C++环境)(一) --- websocket++库的安装与使用

来源:互联网 发布:python 兄弟连 百度云 编辑:程序博客网 时间:2024/05/16 18:56

websocket官方网址:http://websocket.org/

websocket++官方网址:https://www.zaphoyd.com/websocketpp

websocket++使用手册:https://www.zaphoyd.com/websocketpp/manual/


今天接收到一个任务,说是使用websocket,这还不够,只能用C++语言,这就有点尴尬了。话不多说,走起


一、概述

在C++环境下使用websocket,比较常用的有2个库:websocket++ 和 libwebsockets。 前者是用C++写的,依赖C++11和boost, 后者是用C语言写的,依赖openssl,这里不做过多介绍。

参考网址:http://www.oschina.net/project/tag/321/websocket?lang=21&sort=view


二、websocket++安装

1、websocket++下载

     git网址:https://github.com/zaphoyd/websocketpp

2、安装boost

linux:

yum install boost

yum install boost-devel 


三、websocket++编译

1、比较简单的编译方式

cd websocketpp-master/examples/echo_server

g++ -o test echo_server.cpp -I./ -I/home/wdm/websocketpp-master -L/home/wdm/local/lib -lboost_system -lboost_chrono -lrt

没错就是这么简单,具体boost库路径具体对待


2、用 scons 命令编译

1)what is scons? 

scons是linux下的自动构建工具,类似cmake,这里不做过多介绍。


2)scons下载与安装

(1)你需要先安装python,这里就不做过多介绍了


(2)scons 下载

wget http://prdownloads.sourceforge.net/scons/scons-2.2.0.tar.gz .

tar zxvf scons-2.2.0.tar.gz

cd scons-2.2.0

python setup.py install

正常情况下,scons将安装到${PYTHON_INSTALL_DIR}/bin/下


3)编译websocket++库

有同学会问:为毛费那么大的事?不都是 configure make&makeinstall解决吗?

因为websocket++就是用scons编译的,理由很简单。


仔细观察会发现在文件夹中有 SConstruct,而这个文件恰恰是用python写的,下次遇到你就知道了。


cd websocketpp-master  //进入根文件夹

scons                             //编译


what? 是不是很慢?可以先把其他的程序注释掉,先只编译echo_server



scons -c   //清空 

scons      //再次编译

对!你没有看错!一大堆错误,很坑


解决办法:显然是缺少chrono库啊

打开根目录下的SC文件

vi SConstruct

改成这样,你没有看错



scons      //再次编译

你没有看错!还是有错误(其实现在echo_server和echo_client已经编译完了)


解决方法:

vi connection.cpp +430



scons      //再次编译

没错 还是有错误。。。屡败屡战!


解决方法:

vi test/utility/close.cpp +40

将所有的close作用域前面都加上websocketpp::



scons      //再次编译

泪流满面,终于编过去了!



4)查看编译后的可执行文件

tree websocketpp-master/build/release



OK,这仅仅是个开始,稍后再尝试编译其他的例子。


四、websocket++的echo_client和echo_server的使用

第三步已经把echo_client和echo_server编译出来了,让我们先执行一下2个程序

1、启动echo_server


你没有看错,竟然启动不起来!崩溃。。。

解决方法:

翻译一下错误信息:大意是地址家族协议不支持。定位代码出错部分:

// Listen on port 9002
echo_server.listen(9002);


OK,查看源代码:

vi  websocketpp/transport/asio/endpoint.hpp


你没有看错,用的竟然是IPV6!


找找看看有木有重载的listen()函数,不错找到了!



修改为:echo_server.listen(websocketpp::lib::asio::ip::tcp::v4(),9002);

OK,编译,再启动试试,哦也,成功启动


2、启动echo_client

谢天谢地,木有问题


3、成功连接界面




4、用网页测试工具测试

网页测试工具网址:http://www.blue-zero.com/WebSocket/





告一段落!

0 0