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/
告一段落!