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

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第1张图片

 

scons -c   //清空 

scons      //再次编译

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第2张图片

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

打开根目录下的SC文件

vi SConstruct

改成这样,你没有看错

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第3张图片

 

scons      //再次编译

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

解决方法:

vi connection.cpp +430

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第4张图片

 

scons      //再次编译

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第5张图片

解决方法:

vi test/utility/close.cpp +40

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第6张图片

 

scons      //再次编译

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

 

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

tree websocketpp-master/build/release

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第7张图片

 

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第8张图片

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

 

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第9张图片

 

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

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

 

2、启动echo_client

谢天谢地,木有问题

 

3、成功连接界面

 

4、用网页测试工具测试

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

WebSocket使用(C++环境)(一) --- websocket++库的安装与使用_第10张图片

 

 

告一段落!

你可能感兴趣的:(流行开源软件使用,WebSocket)