C++开源库使用之evpp(一)

  • Post author:
  • Post category:其他


配置安装与使用范例

1.1简介


evpp

是一个基于

libevent

开发的现代化C++11高性能网络服务器,自带TCP/UDP/HTTP等协议的异步非阻塞式的服务器和客户端库。( 由国内360公司开发并提供的C++开源库)发布在GitHub上:

https://github.com/Qihoo360/evpp

,更加详细的介绍打开上面的链接即可了解到。

1.2配置安装

由于本人工作环境为Windows系统上的VS2015,遂在此着重说明一下Windows平台上如何快速的配置安装evpp开源库。Linux系统上的配置在此略过。(Linux上配置安装请参考:

https://github.com/Qihoo360/evpp/blob/master/docs/quick_start.md

使用的工具:

vcpkg



https://github.com/Microsoft/vcpkg

该工具的优点:

自动下载开源库源代码;源码包的缓存管理和版本管理,可以升级版本;轻松编译;依赖关系检查(比如编译libcurl,会自动下载zlib、openssl进行编译);无缝集成Visual Studio,不需要设置库文件、头文件的所在目录,自动集成;Visual Studio全平台支持,不仅支持Debug/Release、x86/x64编译,还支持UWP、ARM平台的编译。

注意——该工具仅支持VS2015 update3版本和VS2017所有版本。

关于vcpkg的编译和操作指令请参考:

https://blog.csdn.net/cjmqas/article/details/79282847

在编译vcpkg之后,接下来开始安装evpp。


㈠进入到vcpkg.exe所在文件夹

以管理员的方式运行命令提示符——打开提示符窗口——输入安装vcpkg的盘符——cd切换到具体的文件夹

注:具体的文件夹视个人安装编译情况而定,上图仅供参考。


㈡安装evpp

执行命令如下命令:

vcpkg.exe install evpp:x64-windows

注:如何命令行中不指定特定架构的话,将默认安装x86架构的开源库。

安装之后,执行如下命令:

vcpkg.exe integrate install

,即将其集成到全局。


㈢VS2015上使用

在集成到全局之后,可以在任意工程中使用安装好了的evpp库。


注意:

由于我们安装时选择的是x64架构的evpp库,因此在使用时需要将VS2015的开发环境

切换到x64

的情形下才能正常的使用。(VS新建工程一般默认x86)

1.3使用范例

Ⅰ客户端程序示例

包含头文件

#include "Cat021DLL.h"    //该头文件为个人从外部导入的头文件
#include <iostream>
#include <string>

#include <evpp/tcp_client.h>    //evpp库包含的头文件
#include <evpp/buffer.h>
#include <evpp/tcp_conn.h>

主程序

重点函数讲解①:

消息回调函数

——void evpp::TCPClient::

SetMessageCallback

(const evpp::MessageCallback& cb)

注:设置消息回调以处理来自远端服务器的消息(信息)

重点函数讲解②:

连接回调函数

——void::evpp::TCPClient::

SetConnectionCallback

(const evpp::ConnectionCallback& cb)

注:当TCPClient和远端服务器建立一个连接或者一个存在的连接断开或者建立连接失败时设置相关的连接事件。

示例主程序如下:

int main()
{
    std::string addr="192.168.8.131:8078";
    
    evpp::EventLoop loop;
    evpp::TCPClient client(&loop,addr,"TCPClient");    //构造函数,创造客户端对象
    //消息回调函数
    client.SetMessageCallback([&loop,&client](const evpp::TCPConnPtr& conn,evpp::Buffer* msg) {
        evpp::Slice sli=msg->ToSlice();
        unsigned char ch[200];
        for(auto i=0;i<sli.size();++i)
        {
            ch[i]=sli[i];

        }
        std::string s=DataParser(ch);
        std::cout<<s<<std::endl;
        msg->Reset();                //清空缓冲区
    });    //参数由匿名函数对象组成
    
    //连接回调函数
    client.SetConnectionCallback([](const evpp::TCPConnPtr& conn) {
        if(conn->IsConnected()) {
            LOG_INFO<<"Connected to"<<conn->remote_addr();
            conn->Send("hello");
        }
        else {
            conn->loop()->Stop();
        }
    });
    client.Connect();
    loop.Run();

    return 0;
}

#include "winmain-inl.h"        

1.4参考资料


  1. https://github.com/Qihoo360/evpp

  2. https://blog.csdn.net/cjmqas/article/details/79282847

  3. https://github.com/Microsoft/vcpkg



版权声明:本文为qingfengleerge原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。