1. 方案的确定

1)基本需求

用户1000+, IO压力不大;

多个客户端打开网站,输入查询字符串strclient,发送给服务器=》服务器接收客户端发过来的数据并处理,将结果返回给客户端;

2)并发网络服务程序设计方案

详见:《Muduo_网络库使用手册》的1.6节-《详解Muduo多线程模型》

@ muduo中TcpServer模式的选择:多线程模式

模式一:单线程,accept与TcpConnection用同一个线程做IO;

模式二:多线程,accept与EventLoop在同一个线程,另外创建一个EventThreadPool,新到的链接会被round-robin方式分配到线程池中;

=》问题

单线程和多线程运行时候的区别?

=》分析:采用多线程而不是多进程的原因

鉴于dealdata(假设服务器处理客户端数据的函数为dealdata)是一个计算密集型的任务,其瓶颈在CPU。为了让单线程程序充分利用CPU资源,简单的方法是在同一台机器上部署多个dealdata进程,让每个进程占用不同的端口。这样就把难题推给了客户端,因为客户端需要自己做负载均衡,然而鉴于本项目的用户较少(约1000),服务器进程不需要开很多,所以部署复杂均衡似乎小题大做;

@ 并发网路服务程序的选择:方案8

aaarticlea/png;base64,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" alt="" />

=》分析

方案6:在收到客户端的请求后,不在reactor线程计算,而是创建一个新线程去计算,以充分利用多核CPU。这个方案的特点是out-of-order,即同时创建多个线程去计算同一个连接上收到的多个请求,那么算出的结果的次序是不确定的;(这不满足本项目的需求)

方案8:为弥补方案6中每个请求创建线程的缺陷,根据用户的多少,使用固定大小的线程池。全部的IO工作都在一个reactor线程完成,而计算任务交给threadpool;因为计算任务彼此独立,而且IO的压力不大,这种方案很适用;

=》问题

公司用户1000人,如果1000人同时连接,muduo库的压力测试怎样?算不算IO压力不大的情形;

2.实战

muduo库是使用基于对象实现的,经常会使用到bind、function等函数实现函数回调机制;

根据《Muduo网络库使用手册》中的“数独求解服务器”和“Boost.Asio的聊天服务器”,结合muduo源文件中example下的代码写出父服务器与客户端交互操作的多线程服务器程序。

@ muduo::string 与 std::string的转换

 // muduo->std
muduo::string muduostr = "...";
std::string str(muduostr.c_str(), muduostr.size());
// std->muduo
std::string str = "...";
muduo::string muduostr(str.c_str(), str.size());

@ muduo中使用threadpool时出现的问题

参考资料:使用muduo编译链接错误 undefined reference to `muduo::ThreadPool::run(boost::function<void ()()>&&)'

aaarticlea/png;base64,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" alt="" />

出现上述错误是因为使用的muduo库为-lmuduo_base,但是此链接库中并没有muduo::ThreadPool;

应该在Makefile中将-lmuduo_base更改为-lmuduo_base_cpp11。

Muduo网络库实战(二):实现服务器与客户端的连接的更多相关文章

  1. Muduo网络库实战(一):安装和配置

    1. 参考资料 <Muduo_网络库使用手册> 2. 实战记录 1) muduo依赖项安装 centos安装cmake命令:# yum install cmake centos安装libb ...

  2. muduo网络库使用心得

    上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...

  3. muduo网络库架构总结

    目录 muduo网络库简介 muduo网络库模块组成 Recator反应器 EventLoop的两个组件 TimerQueue定时器 Eventfd Connector和Acceptor连接器和监听器 ...

  4. muduo 网络库学习之路(一)

    前提介绍: 本人是一名大三学生,主要使用C++开发,兴趣是高性能的服务器方面. 网络开发离不开网络库,所以今天开始学一个新的网络库,陈老师的muduo库 我参考的书籍就是陈老师自己关于muduo而编著 ...

  5. 长文梳理muduo网络库核心代码、剖析优秀编程细节

    前言 muduo库是陈硕个人开发的tcp网络编程库,支持Reactor模型,推荐大家阅读陈硕写的<Linux多线程服务端编程:使用muduo C++网络库>.本人前段时间出于个人学习.找工 ...

  6. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  7. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  8. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  9. 陈硕 - Linux 多线程服务端编程 - muduo 网络库作者

    http://chenshuo.com/book/ Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)http://blog.csdn.net/nk_test/ ...

随机推荐

  1. Ubuntu16.04默认Python3.5升级Python3.6踩坑

    好久没更新博客了,每天还是踩坑中.今天遇到第一个问题“ImportError: No module named 'secrets'”,导包是常见问题.这次的问题导致我又重装了一次环境,不过这是一个新服 ...

  2. 打造一款 刷Java 知识的小程序(一)

    一.为什么要打造 Java要学的东西太多了,所以准备把这些知识汇总到一起,而小程序是一个比较好的入口,借助微信客户端,打开方便. 二.打造成什么样 首页展示:包含了Java各大知识点模块 知识点展示: ...

  3. Nuxt内导航栏的两种实现方式

    方式一 | 通过嵌套路由实现 在pages页面根据nuxt的路由规则,建立页面 1. 创建文件目录及文件 根据规则,如果要创建子路由,子路由的文件夹名字,必须和父路由名字相同 所以,我们的文件夹也为i ...

  4. matplotlib中的基本概念

    有外语基础的朋友看这里: matplotlib官方文档 Figure(图像): 组成部分

  5. 判断一组checkbox/redio是否被选中,为其添加样式

    业务场景:当一行中有一个CheckBox被选中,则为此行添加class. <script type="text/javascript"> $(function(){ $ ...

  6. 一个不错的java学习博客

    http://iteye.blog.163.com/blog/static/18630809620131484835129/

  7. java 字符串截取 - 最后带上mysql字符串截取比较

    Java中的substring()方法有两个方法的重载,一个带一个参数的,一个带两个参数的. 第一种写法: substring(n);//从索引是n的字符开始截取,条件(n>=0,n<字符 ...

  8. 在java 中一种简单方式的声明静态Map常量的方法

    我现在需要在一个类里面放一个HashMap,往里面放一些数据,每次要从数据库中取数据的时候先查找HashMap,看是否已经存在,若存在就直接提取,若不存在就从数据库中抽取数据之后再放到HashMap中 ...

  9. 基于linux或windows平台上的c/s简单通信

    linux: tcpclient.cpp #include<iostream> #include<unistd.h> #include<sys/types.h> # ...

  10. Salesforce 产品 | 协同办公“大魔王”,Salesforce Quip的使用攻略!

    Salesforce帮助企业渡过疫情难关,支持在线远程办公.7.5亿美金收购的动态文档共享平台Quip,即刻开放给所有Salesforce老客户还有非营利组织免费使用至2020年9月30日. Quip ...