mthread 基于协程的高性能网络库开源项目

我要开发同款
匿名用户2018年07月31日
177阅读

技术信息

开源地址
https://github.com/linkxzhou/mthread
授权协议
Apache

作品详情

mthread简介

[mthread]是一个基于协程的高性能网络库,目前提供支持TCP/UDP等协议的非阻塞式的客户端库(服务端正在开发中...)

特性

不用依赖任何第三方库

基于支持多个平台的协程调度

支持epoll,kequeue

不用写异步调度代码,全部代码同步,但是框架内部是异步处理

提供非阻塞TCP客户端

提供非阻塞UDP客户端

优秀的跨平台特性和高性能(理论上只要系统内存足够大,句柄没有限制,可以无限创建无限个协程)

使用简单,只需要引入一个libmthread.a或者ibmthread.so

除此之外,基于该库之上正在开发各个客户端库:memcache,redis,wrk等

快速开始编译

编译.a或者.so,到当前目录下执行:

make

编译测试代码,到tests目录下执行:

make

或者只运行某个单元测试:

makeevet

Adsclietvoid fuc(void *args){    std::strig *str = (std::strig*)args;    time_t ttl = 0;    std::vector<it32_t> vc;    it ret = GetIstace<DNS>()->ds_lookup(str->c_str(), vc, &ttl);    if (ret < 0)     {        LOG_ERROR("%s, make ds query failed", str->c_str());        retur ;    }    for (std::vector<it32_t>::iterator iter = vc.begi();         iter != vc.ed(); iter++)     {        struct i_addr addr;        memcpy(&addr, &(*iter), sizeof(struct i_addr));        LOG_DEBUG("%s, %d, %s", str->c_str(), *iter, iet_toa(addr));    }    LOG_DEBUG("ttl : %ld", ttl);}it mai(it argc, char* argv[]){    it ret = mt_iit_frame();    LOG_DEBUG("iit ret : %d", ret);    mt_set_hook_flag();    mt_set_timeout(200);    Frame *frame = GetIstace<Frame>();    // 测试 : 使用协程请求耗时    LOG_DEBUG("--- start time : %ld", Utils::system_ms());    for (it i = 2000; i < 2005; i++)    {        std::strigstream ss;        ss << "www." << i << ".com";        std::strig *s = ew std::strig(ss.str());        Frame::CreateThread(fuc, s);    }    Frame::Ru(true);    LOG_DEBUG("--- ed time : %ld", Utils::system_ms());    retur 0;}

说明其中ds内部修改调用接口

...    addr.si_family = AF_INET;    if (m_ds_svr_ == NULL)    {        addr.si_addr.s_addr = iet_addr(PUBLIC_DNS_DEFAULT_SERVER);  ///服务器ip    }    else    {        addr.si_addr.s_addr = iet_addr(m_ds_svr_);  ///服务器ip    }    addr.si_port = htos((uit16_t)PUBLIC_DNS_DEFAULT_PORT);    it query_le = make_ds_query_format();    if (query_le <= 0)     {        retur -1;    }    it recv_le = sizeof(m_recv_buf_);    ret = udp_sedrecv(&addr, m_sed_buf_, query_le, m_recv_buf_, recv_le, m_timeout_);    LOG_DEBUG("ret : %d, recv_buf : %s, recv_le : %d", ret, m_recv_buf_, recv_le);...

功能介绍

mthread 简介 [mthread]是一个基于协程的高性能网络库,目前提供支持TCP/UDP等协议的非阻塞式的客户端库(服务端正在开发中...) 特性 不用依赖任何第三方库 基于支持多个平台...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论