高性能分布式网络服务器--TCPServer模块
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模块相关推荐
- 高性能分布式网络服务器--前言
前言 tiger是基于C++ 11标准编写, 用于构建可扩展的分布式服务框架.整体设计思路清晰,理解成本低.不管是作为服务器的入门学习还是商业服务器的构建,tiger都是一个不错的选择. GitHub ...
- Nginx高性能Web服务器实战教程PDF
网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...
- 高性能图片服务器–ZIMG
011年李彦宏在百度联盟峰会上就提到过互联网的读图时代已经到来1,图片服务早已成为一个互联网应用中占比很大的部分,对图片的处理能力也相应地变成企业和开发者的一项基本技能.需要处理海量图片的典型应用有: ...
- 服务器后端开发系列——《实战Nginx高性能Web服务器》
1.高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例 内容:概述Nginx的背景知识和简单的入门实例. 2.高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级 ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- 一步一步教你如何自己架设高性能CS服务器(转)
一步一步教你如何自己架设高性能CS服务器 没有人一生出来就什么都会的,同样我也是什么都不会,自己慢慢学的.我知道Dcoo上很多高手,如果本文有错误的地方,请不吝指正.以下基本都是偶在Dcoo等论坛上学 ...
- Nginx高性能Web服务器详解
Nginx高性能Web服务器详解 1. 什么是Nginx 1.1 优点 1.2 缺点 2. Nginx负载均衡策略 2.1 轮询策略 2.2 加权轮询策略 2.3 IP hash策略 3. 常用指令 ...
- Warp : Haskell 的高性能 Web 服务器(译文)
Warp : Haskell 的高性能 Web 服务器(译文) 按 GHC 7.8 马上就要发布了.一个很大的改进就是加入了本文所说的并行 IO 管理器.从此之后 Haskell 在高性能服务器领域将 ...
- 一种高性能网络游戏服务器架构设计
网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的游戏画面绘制.客户端与服务器通 ...
最新文章
- 用于3D摄像头的VCSEL技术
- WKWebView中经常用到的操作
- STM32F1库函数初始化系列:串口DMA空闲接收_DMA发送
- centos挂载u盘只读_完美解决linux下U盘文件只读的问题
- 几何画板手机版_运用几何画板解决动点最值问题(二)
- 直连数据库实时更新数据,比python强大,可视化报表这么做简直牛
- 乌镇互联网大会 | 王恩东院士谈人工智能:计算力就是生产力
- 【Todo】【转载】Scala中Array, List, Tuple的区别
- C++ 全局钩子屏蔽按键
- 决策树应用实例③——银行借贷模型
- .rpt 文件怎麽打開?Crystal Reports 打開.rpt失敗 ?
- M1 Mac无法读取NTFS格式硬盘里的内容应该怎样操作?
- android跑马灯效果不起作用,Android实现跑马灯效果的方法
- 互联网早报:哈啰科技发布新款助力车“白鸥”、小哈能量站等多款新产品
- ASM+LINUX+ORACLE_11G安装
- 数据分析-数据规范化的一些方法
- MTK平台点亮sensor以及mtk开机初始化
- 一般纳税人什么意思(为什么一般纳税人认定500万)
- mingw32-make.exe缺少的方法
- 全球与中国口腔引导性骨再生(GTR)膜市场深度研究分析报告