- 博客(23)
- 资源 (4)
- 收藏
- 关注
原创 muduo库的学习---中间遇到的问题
本帖测试用,一旦问题全部解决,将不复存在。1.channel中有个tie方法,是用来保证持有channel对象的生命周期的但是它是如何作用的?2.TcpConnection::handleClose在这个函数中为什么要调用connectionCallback?3.在TcpConnection中有1个成员context以及若干个操作它的函数这是干什么用的?
2016-02-29 20:58:02 440
原创 muduo库的学习9---TcpServer与TcpClient的基本设计---TcpConnection成员
TcpConnection是muduo库里面最复杂的类。其复杂性来自于TCP连接固有的复杂性,包括连接建立、连接断开、数据发送、数据接收。后面的章节会针对这4个内容详细讲解。1.类的结构class TcpConnection {/*********************Function Member***********************************
2016-02-29 16:39:15 441
原创 muduo库的学习7---TcpServer与TcpClient的基本设计---总论
这里所涉及的新文件包括:Connector,TcpConnction,Acceptor,TcpServer,TcpClient1.程序的组织
2016-02-29 11:32:06 475
原创 muduo库的学习6---Buffer的基本设计
1.使用应用层buffer的原因这个陈硕对应的书里面讲地很清楚,见书P205 7.4.2分为两点①为什么需要output buffer②为什么需要input buffer2.Class Bufferclass Buffer : public muduo::copyable{/*******Function Member***********///genera
2016-02-28 16:51:44 732
原创 muduo库的学习5---loop的基本设计---Channel细节
类似于EventLoop的分析,忽略一些次要成员。1.类定义class Channel{typedef boost::function EventCallback;typedef boost::function ReadEventCallback;/***************Function Member******************///bind with loop
2016-02-28 10:36:39 427
原创 muduo库的学习4---loop的基本设计---EventLoop细节
除了一些测使用的函数,返回数据成员的函数,以及标志位变量,循环变量,这里会简单描述所有其他的数据成员以及函数成员的功能。不区分public与privateclass EventLoop:{/**********Function Memeber**************/typedef boost::function Functor;EventLoop();~EventLoo
2016-02-27 16:39:51 490
原创 Libev库学习3---watcher与loop的操作
1.watcher①init(初始化)作用:将watcher与cb关联②set(设置)作用:将watcher与fd关联,并设置关注的具体事件(读,写)注:这个函数可以作为最初设置,也可以作为设置更新。③start(注册)作用:将watcher与loop关联④stop(注销)作用:将watcher与loop取消关联2.loop①run作用:
2016-02-27 11:07:06 421
原创 网络编程4---poll与epoll的区别
之前在我的文章:网络编程1---select poll epoll中总结了这3个函数的接口,但是对于epoll为什么比poll好,知之甚少。今天在网上查了一些,进行了一些总结。这篇文章总结自:①linux内核poll/select/epoll实现剖析②在Linux上开发网络服务器的一些相关细节(1)---poll与epoll其中第2篇文章在网络上流传甚广,我没有
2016-02-26 10:10:15 2286
原创 muduo库的学习3---loop基本设计---总论
这里所涉及的文件包括(1)loop用的:Callbacks,Poller,EventLoop,EventLoopThread,EventLoopThreadPool(2)IO用的:Channel(3)Timer用的:Timer,TimerQueue,TimerId1.关系图与功能可以用于libev的对比来很好滴表达(1)Poller就是实现了libev的loop循环(2
2016-02-25 15:33:35 521
原创 muduo库的学习1---socket基本设计---总论
这个部分涉及最底层的一些文件,包括Endian,SocketsOps,InetAddress,Socket这几个文件。1.基本关系与内容它们的关系我用一个图来表示如图所示,Endian是封装了各种大端---小端转换的函数,SocketsOps实现了许多例如socket的各种操作。这两个文件都是位于Sockets空间命名空间之下的,它们都是直接调用linux系统函数来实现
2016-02-25 13:48:28 452
原创 muduo库的学习0---总论
恩,muduo库用的版本是v1.0.8。听说下一版本会支持C++11,感觉非常地激动。毕竟当前muduo库需要boost库的支持,而据我目前看的内容来看,所有这里需要用到的boost库的内容用C++11标准都能很方便地实现。
2016-02-25 09:25:23 292
原创 muduo库的学习2--Socket的基本设计---代码细节
1.作用封装了,像socket,connect,bind,accept,listen,read,write,close,以及一些地址转换的函数。加入了出错控制信息,并且定义的操作均为非阻塞的。并且同意控制在一个muduo::net::sockets的命名空间之下。2.细节①关于VALGRIND以及NO_ACCEPT4这两个宏,它们在C++标准库里面是没有的,我用grep -
2016-02-24 21:08:07 515
原创 Ubuntu文件搜索路径
1.头文件主要有4种方式按顺序依次为①编译时指定编译的时候加上-I 指定这个I是大写的i②GCC/G++环境变量由C_INCLUDE_PATHCPLUS_INCLUDE_PATH分别指定③系统默认/usr/include /usr/local/include等等④当前路径#include"xxxxx"2.静态库文件按
2016-02-24 11:19:37 543
原创 Ubuntu的目录与第三方库
1.Ubuntu目录结构在Ubuntu使用记录(常用命令与目录树)中我总结了一些关于Ubuntu/Linux的目录的一些知识,这里回顾一下。软件主要分为3类,可以用which命令查看,一个软件/命令的位置①/sbin表示系统的一些程序,比如shutdown②/bin表示一些可以用在bash上面的命令,比如ps,ls等③/usr/bin表示其他安装的软件,比如我们需要
2016-02-24 10:05:15 3932
原创 网络编程3---常用服务器编程模型
本文的内容主要总结自:《Linux多线程服务端编程---使用muduo C++网络库》,作者是陈硕1.单线程服务器编程模型(Reactor模型)non-blocking IO + IO multiplexing(1)基本运作方式:①event loop②event-driven③call-back(2)伪代码示意while(!done){ int ti
2016-02-23 21:25:03 612
原创 网络编程2---select poll epoll
其实linux自带的man是非常好的学习工具。select, poll, epoll都能直接通过man得到很详细的解释,当然具体的栗子就需要在网上找找或者看看书了。1.select#include int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *ti
2016-02-23 19:09:04 417
原创 Libev库学习2---简单的IO多路复用服务器
1.用到的库①libev使用它的对于select,epoll等等的封装来实现IO多路复用②csapp使用的是csapp书中的socket函数,以及包装函数来实现一些socket的函数2.功能server关注的事件有两个。①listenfd有连接请求到来的时候,accept,并且将建立的新的socket连接建立为监听事件,加入loop之中。②在connfd上面有信
2016-02-23 16:49:50 721
原创 《深入理解计算机系统》P652页的select程序
程序是一个server的程序,主要是使用select来IO多路复用STDIN和套接字的连接请求即listenfd。重点注意line 23-34①监听到listenfd这个时候就accept产生connfd,并且调用echo函数。echo函数的作用是,一直阻塞接收对面的消息,收到消息就echo完全一样的消息给对方。②监听到有STDIN这个时候就调用command函数。
2016-02-23 09:47:41 291
原创 Libev库学习1---安装
准备看一下libev这个库,由于这个库很小,所以安装来先跑一跑。1.源码下载直接百度libev进入官网就能下载源文件具体的网址为:http://dist.schmorp.de/libev/2.库的编译解压文件,进入文件目录编译的时候需要首先切换为管理员权限#./configure#make#make install编译好后,它是被放在了/usr/
2016-02-22 15:55:45 3225 4
原创 JAVA学习笔记6--加载从网上下载的类文件到自己的工程
主要有两个难点:导入库的自动import,重新配置包名1.自动import用到的库比如说我在使用从网上下载的Algorithms 4th的答案的时候,因为会用到这本书自己的第三方库,但是源文件又没有给出import语句。所以需要自己添加。这个其实也很简单,选中包名,右键--》Source--》Organize Imports即可。2.重新配置包名比如说我想将一个
2016-02-04 09:19:33 384
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人