TCPServer模块

TCPServer模块是采用Template Pattern设计模式封装了一个常规TCP服务器。支持同时绑定多个地址进行监听,只需要在绑定时传入地址数组即可。还可以分别指定接收客户端和处理客户端的协程调度器

github

https://github.com/huxiaohei/tiger.git

实现

初始化TCPServer时需要制定两个IO调度器,分别用于接受客户端和处理客户端请求。在接受到客户端连接请求时,生成对应的客户端Socket实例(前面在接受Socket模块的时候已经介绍过,Socket所对应的sock会在IO调度器中注册读写事件),并将Socket实例交由handle_client处理

因此,使用TCPServer时,必须从TCPServer派生一个新类,并重新实现子类的handle_client

使用可以参考EchoServer

class EchoServer : public tiger::TCPServer {public:void handle_client(tiger::Socket::ptr client) override {TIGER_LOG_D(tiger::TEST_LOG) << "[handle client:" << client << "]";auto buf = std::make_shared<tiger::ByteArray>();while (true) {buf->clear();std::vector<iovec> iovs;buf->get_enable_write_buffers(iovs, 1024);int rt = client->recv(&iovs[0], iovs.size());if (rt == 0) {TIGER_LOG_I(tiger::TEST_LOG) << "[has closed client:" << client << "]";break;} else if (rt < 0) {TIGER_LOG_E(tiger::TEST_LOG) << "[client error"<< " erron:" << strerror(errno) << "]";break;}buf->set_position(buf->get_position() + rt);buf->set_position(0);const std::string &msg = buf->to_string();TIGER_LOG_D(tiger::TEST_LOG) << "[Echo receive: " << msg << "]";client->send(msg.c_str(), msg.size());if (msg.find("stop") == 0) {TIGER_LOG_I(tiger::TEST_LOG) << "[ECHO STOP]";stop();tiger::IOManager::GetThreadIOM()->stop();}}}
};void run() {auto addr = tiger::Address::LookupAny("0.0.0.0:8080");auto ech_server = std::make_shared<EchoServer>();ech_server->bind(addr);ech_server->start();
}int main() {tiger::SingletonLoggerMgr::Instance()->add_loggers("tiger", "../conf/tiger.yml");tiger::Thread::SetName("TCPServer");TIGER_LOG_D(tiger::TEST_LOG) << "[tcp_server test start]";auto iom = std::make_shared<tiger::IOManager>("TCPServer", true, 1);iom->schedule(run);iom->start();TIGER_LOG_D(tiger::TEST_LOG) << "[tcp_server test end]";return 0;
}

高性能分布式网络服务器--TCPServer模块相关推荐

  1. 高性能分布式网络服务器--前言

    前言 tiger是基于C++ 11标准编写, 用于构建可扩展的分布式服务框架.整体设计思路清晰,理解成本低.不管是作为服务器的入门学习还是商业服务器的构建,tiger都是一个不错的选择. GitHub ...

  2. Nginx高性能Web服务器实战教程PDF

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  3. 高性能图片服务器–ZIMG

    011年李彦宏在百度联盟峰会上就提到过互联网的读图时代已经到来1,图片服务早已成为一个互联网应用中占比很大的部分,对图片的处理能力也相应地变成企业和开发者的一项基本技能.需要处理海量图片的典型应用有: ...

  4. 服务器后端开发系列——《实战Nginx高性能Web服务器》

    1.高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例 内容:概述Nginx的背景知识和简单的入门实例. 2.高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级 ...

  5. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  6. 一步一步教你如何自己架设高性能CS服务器(转)

    一步一步教你如何自己架设高性能CS服务器 没有人一生出来就什么都会的,同样我也是什么都不会,自己慢慢学的.我知道Dcoo上很多高手,如果本文有错误的地方,请不吝指正.以下基本都是偶在Dcoo等论坛上学 ...

  7. Nginx高性能Web服务器详解

    Nginx高性能Web服务器详解 1. 什么是Nginx 1.1 优点 1.2 缺点 2. Nginx负载均衡策略 2.1 轮询策略 2.2 加权轮询策略 2.3 IP hash策略 3. 常用指令 ...

  8. Warp : Haskell 的高性能 Web 服务器(译文)

    Warp : Haskell 的高性能 Web 服务器(译文) 按 GHC 7.8 马上就要发布了.一个很大的改进就是加入了本文所说的并行 IO 管理器.从此之后 Haskell 在高性能服务器领域将 ...

  9. 一种高性能网络游戏服务器架构设计

    网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的游戏画面绘制.客户端与服务器通 ...

最新文章

  1. 用于3D摄像头的VCSEL技术
  2. WKWebView中经常用到的操作
  3. STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送
  4. centos挂载u盘只读_完美解决linux下U盘文件只读的问题
  5. 几何画板手机版_运用几何画板解决动点最值问题(二)
  6. 直连数据库实时更新数据,比python强大,可视化报表这么做简直牛
  7. 乌镇互联网大会 | 王恩东院士谈人工智能:计算力就是生产力
  8. 【Todo】【转载】Scala中Array, List, Tuple的区别
  9. C++ 全局钩子屏蔽按键
  10. 决策树应用实例③——银行借贷模型
  11. .rpt 文件怎麽打開?Crystal Reports 打開.rpt失敗 ?
  12. M1 Mac无法读取NTFS格式硬盘里的内容应该怎样操作?
  13. android跑马灯效果不起作用,Android实现跑马灯效果的方法
  14. 互联网早报:哈啰科技发布新款助力车“白鸥”、小哈能量站等多款新产品
  15. ASM+LINUX+ORACLE_11G安装
  16. 数据分析-数据规范化的一些方法
  17. MTK平台点亮sensor以及mtk开机初始化
  18. 一般纳税人什么意思(为什么一般纳税人认定500万)
  19. mingw32-make.exe缺少的方法
  20. 全球与中国口腔引导性骨再生(GTR)膜市场深度研究分析报告

热门文章

  1. PGSQL修改在使用中的数据库名称
  2. 了解ResNet网络结构特点,利用ResNet完成图像分类
  3. dstat wai_在HTML页面中避免使用WAI-ARIA进行冗余
  4. css div下第一个span,CSS入门教程——div和span
  5. GMT5在linux下的中文支持
  6. delphi版MP3切割
  7. Vue学习笔记(十九)——组件props信息的修改
  8. OpenCV-Python图像直方图计算calcHist函数详解、示例及图形呈现
  9. 德阳计算机信息通信学校,四川省信息通信学校2021年招生简章
  10. 最简单的scull设备驱动