WebSocket接C++服务器做微信小程序的服务端

websocketpp笔记

一.环境的搭建
c++服务器要使用websocket与客户端通信需要用websocketpp;
而websocketpp要使用c++的boost库;

一.下载boost 的c++库
第一种方法:、直接安装boost (1.53成功)
linux:
yum install boost
yum install boost-devel //boost-devel-1.53.0-27.el7.x86_64
//yum install boost-doc

库文件在: /usr/lib64 ;
头文件在: /usr/include/boots

第二种方法:(1.65成功安装,运行程序时找不到库,可能是64位系统的原因)

1.下载
官网:http://www.boost.org/users/download/
下载: boost_1_65_0.tar.gz //92.7M version history里有历史版本

2.安装
解压: tar -vzxf boost_1_65_0.tar.gz (解压成功)
如果失败,可能没下载完,(下载boost_1_66_0.tar.gz时,只有40M,解压失败)
进入文件夹boost_1_65_0
产生安装工具命令: ./bootstrap.sh
安装命令: ./b2 install
安装成功后,
库文件在: /usr/local/lib 下,好多;
头文件在: /usr/local/include/boots

3.添加环境变量:
切换到cd /etc/profile.d目录下,使用超级用户创建文件boost.sh,里面添加如下内容
#!/bin/sh
BOOST_ROOT=/usr/local/boots/boost_1_65_0
BOOST_INCLUDE=/usr/local/include/boost
BOOST_LIB=/usr/local/lib
export BOOST_ROOT BOOST_INCLUDE BOOST_LIB

修改boost.sh的权限命令: chmod 755 boost.sh,
执行命令:source boost.sh

4.测试程序,boost库是否可用
#include <boost/lexical_cast.hpp>
#include
int main() {
using boost::lexical_cast;
int a = lexical_cast(“123”);
double b = lexical_cast(“123.12”);
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
return 0;
}

二.下载websocketpp
1.下载解压
https://github.com/zaphoyd/websocketpp
websocketpp-master.zip //当下版本0.7.0
2.在windows下解压,然后复制到linux下;
不用安装什么的,直接使用
把websocketpp-master/websocketpp放入工程的src文件夹下,把路径包含进去就可以使用;

boost 1.65为2017.8
websocketpp-master 为2016.2
//可能版本相差太远,导致boost安装成功而websocketpp找不到库,
系统直接安装的boost1.53可以用;还可以试试boost1.60版;

三.使用
用eclipse新建一个工程
1.添加websocketpp
把websocketpp-master/websocketpp放入工程的src文件夹下;
添加包含目录:
工程----属性—c\c++build----settings----gcc c++compile—includes–
添加路径:…/src/websocketpp

2.添加boost库:
1).添加包含目录:
工程----属性—c\c++build----settings----gcc c++compile—includes–
/usr/local/include/boots

2).添加库目录
工程----属性—c\c++build----settings----crossG++Linker—libraries–
添加库目录
/usr/lib64

添加库
boost_system
boost_system-mt
boost_timer
boost_chrono
rt

注意:
编译命令显示:
g++ -L/usr/lib64 -L/usr/include -o “websocket” ./src/test.o -lboost_system -lboost_timer -lboost_chrono -lrt -lboost_system-mt
-l表示引入的库,-L表示库的路径, -i表示包含的路径;

只添加库boost_system会出现错误:加上上面几个库就解决了
undefined reference to `boost::chrono::steady_clock::now()’

3.一个简单的测试程序
//////////////////////////////
//boost库文件
#include <boost/utility.hpp>
#include <boost/lexical_cast.hpp>
#include

//////////////////////////////
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
using namespace std;

typedef websocketpp::serverwebsocketpp::config::asio server;
void on_message(websocketpp::connection_hdl hdl, server::message_ptr msg) {
cout<get_payload()<<endl;
}

int main() {
cout<<“tgfgfgfgfgfgfgfgf”<<endl;
server print_server;
print_server.set_message_handler(&on_message);
print_server.init_asio();
print_server.listen(9002);
print_server.start_accept();
cout<<"==============="<<endl;
print_server.run();
cout<<"==============="<<endl;
return 1;
}

可以编译运行,但是eclipse里 cout<get_payload()<<endl; 被提示错误了;

二.websocketpp编程
1.使用的库
由于他是基于Boost ASIO来开发网络的功能,所以也必须要下载Boost C++ Libraries来使用;
而如果有需要用到TLS的加密连线的话,应该是会需要使用OpenSSL这个函数库(官网);如果不打算做加密连线的话,基本上是可以跳过这个函数库的。

2.使用的头文件
使用WebSocket++ 来开发程序,一是用来做组态设置(config)的,一是用来决定要开发的程序的脚色类型(Role)的。
1)
在Role 的部分,Server 用来开发WebSocket 服务器的,Client 是可以用来开发C++ 的WebSocket 的用户端程序。
#include <websocketpp/server.hpp>
#include <websocketpp/client.hpp>
server或client,都是template的class,在建立时也需要指定要使用的config才可以。

2)
Config 的部分,WebSocket++ 主要提供了三种类型:
config::core //基本上是提供有限功能的设置,相对的他只会用到C++11的功能。
config::asio //则是使用Boost ASIO做基础来提供完整的功能;
config::asio_tls //则是config::asio再加上TLS的连线加密功能。
Server Client
core core.hpp core_client.hpp
asio asio_no_tls.hpp asio_no_tls_client.hpp
asio_tls asio.hpp asio_client.hpp

如果是要建立使用Boost ASIO、没有TLS 加密的Server 的话,要include 的文件就是:
#include <websocketpp/server.hpp>
#include <websocketpp/config/asio_no_tls.hpp>

2.使用的头文件
使用WebSocketpp;

求DEOM,觉得写CX的人都好帅

大型的cocos2dx游戏能用吗