自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 asio几种异步编程模型

0. 前置知识asio中io_server是一个很重要的东西,任何操作都需要它,在异步编程的时候,需要io_server.run()启动, 有点像事件驱动模型中的 event.loop().(原理不一样,只是说编程类似)1. 一个io_server和一个线程就是主线程一个io_server.run(),这样加入这里面有三个回调函数调用,如果第一个响应了,正在处理过程中,第二个回调函数响...

2019-10-15 21:20:56 732

原创 protobuf不能单独发送一个0

1. protobuf使用过程中遇到一个问题,记录一下定义消息如下message RegisterResponse{ int32 result=1; // 1表示成功,>1表示账号重复,注意不能为0}在服务端使用asio库如下res.set_result(0); // 注意这里把result设置为0...string send_str;res.SerializeTo...

2019-10-11 19:19:53 1559

原创 网络编程协议设计与protobuf反射

1. 问题最近在想tcp连接传输信息中应用层协议如何设计, 普遍的有两种: 加结束符和加头部信息,能不能不加头部信息?..貌似不行2. 协议头协议头必备的两个元素就是长度len, 类型type, 假设占8字节,在客户端和数据封装到一块,发送到服务端,服务端每次先接受8字节,获得类型和长度后,在读取len字节, 根据类型处理.3. protobuf反射机制protobuf能方便定...

2019-10-11 09:45:50 340

原创 线程函数为类函数时

1. 把函数定义为静态thread t(bind(Object::func,a));2. 加thisthread t(bind(Object::func,this,a));

2019-10-10 10:27:32 204

转载 ubuntu卸载已安装软件

sudo dpkg -l|grep mysql // 查看软件sudo dpkg -r 包名 // 卸载

2019-10-08 21:09:09 404

原创 f**k Cpp

C++这坑也太多了吧!!!

2019-09-24 19:27:26 279

原创 unterminated conditional directive错误

#ifndef XXX#define XXX.........#endif可能是没写#endif在有#endif的情况下还报错,是头文件互相包含的问题

2019-09-22 23:14:51 16801

原创 tcp C/S模型 3个必要设置:SO_REUSEADDR,SIGPIPE,TCP_NODELAY

1. SO_REUSEADDR设置套接字的SO_REUSEADDR选项一般来说,客户端调用close()后会进入TIME_WAIT状态, 监听的端口仍被占用着,SO_REUSEADDR是让端口释放后立即就可以被再次使用。2. SIGPIPE忽略SIGPIPE信号连接建立,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据后会收到RST响应,此后再写数据,内核将向进程发出SIGP...

2019-09-14 12:13:10 398

原创 C(m,n)的计算,杨辉三角

在牛客上遇见这道题, 需要计算C(m,n),就是概率论中的:在m个数中取n个,一共有几种情况 ,看到参考答案,有必要记录一下long long c[105][105];const int mod = 1000000007;void init(){ c[0][0]=1; for(int i=1;i<=100;i++){ c[i][0]=1; ...

2019-09-05 18:50:03 5250

原创 关于右值引用的一些理解

右值引用之前看过不少次了,但过一段时间就忘了,这里简单整理一下我的理解右值引用主要用来实现 移动语义 和 完美转发1. 移动语义使用上可以用std::move() ,把参数强制转换成右值我理解就是和浅拷贝很像,不过浅拷贝是多个指针指向堆上的空间,可能会重复释放从而出错,而移动语义是只有一个指针占有堆上的空间,移动后源指针就置空了.如果没有堆上的空间,那移动语义和浅拷贝就没什么区别...

2019-09-03 12:06:37 282

原创 nginx+uwsgi启动和关闭

1. Nginx 开启nginx -c /home/www/nginx.conf-c是指定配置文件,不然用默认的配置,后面的文件路径最好从根目录开始,不然会有一个默认目录,试一下就知道了2. Nginx 关闭:nginx -s stop3. Uwsgi 开启uwsgi -d --ini uwsgi.ini-d是表示在后台运行,都试一下就知道什么意思了4. Uwsig ...

2019-08-27 09:40:36 2232

原创 git入门-官方教程《Pro Git》简单总结

文章目录置顶一、起步1. 配置2. license二、git基础1. 获取 Git 仓库2. 记录每次更新到仓库3. 查看提交历史,git log4. 撤消操作5. 远程仓库的使用,git remote6. 打标签,git tag三、git分支1. 分支简介2. 分支的新建与合并,git checkout3. 分支管理,git branch4. 远程分支,git fetch push pull5....

2019-08-25 15:05:36 857

原创 48.muduo学习笔记之example_聊天服务器例子

1. 说明本例子是与 Boost.Asio 的示例代码中的聊天服务器功能类似的网络服务程序,主要目的是介绍如何处理分包,并初步涉及 Muduo 的多线程功能。代码位于 examples/asio/chat/一共有四个版本的服务器server.cc 单线程server_threaded.cc 多线程TcpServer,并用mutex来保护共享数据mutexserver_threa...

2019-08-21 11:05:21 723

原创 47.muduo学习笔记之example_下载文件例子

说明这个例子源码位于作者的源代码文件夹下examples/filetransfer文件下下实现一个发送文件的命令行小工具,这个工具的协议很简单,在启动时通过命令行参数指定要发送的文件,然后在 2021 端口侦听,每当有新连接进来,就把文件内容完整地发送给对方。可以直接用telnet测试,只是服务器把文件发过去后,直接在控制台输出发送完就调用shutdownWrite()关闭...

2019-08-21 11:04:39 649

原创 46.muduo学习笔记之example_discard例子

1. 说明discard是连接到来时不做任何处理,代码比较短,贴在下面,后面的例子代码较长,还是自己找源码吧实际就是一个DiscardServer类,有EventLoop* 和 TcpServer对象,重写连接到来函数和消息到来函数2. 代码/* 收到消息不做任何处理 */#include<muduo/base/Logging.h>#include<...

2019-08-21 11:03:25 311

原创 45.muduo学习笔记之http_HttpServer.{h&cc}

1. 说明Http服务器一个HttpServer类,不可复制,使用了HttpRequest,HttpResponse,EventLoop,InetAddress,TcpServer类2. 变量类型定义HttpCallback,回调函数TcpServer server_;Tcp服务HttpCallback httpCallback_;回调函数3. ...

2019-08-21 11:02:01 309

原创 44.muduo学习笔记之http_HttpContext.{h&cc}

1. 说明Http协议解析类一个HttpContext类,可复制,使用了Buffer,HttpRequest类2. 变量枚举类型HttpRequestParseState,四种请求头的解析状态枚举:解析请求行,请求头,内容体,解析完毕HttpRequestParseState state_;解析状态HttpRequest request_请求对象,把缓冲...

2019-08-21 11:01:27 289

原创 43.muduo学习笔记之http_HttpResponse.{h&cc}

1. 说明Http响应信息的封装一个HttpResponse类,可复制,使用了Buffer类2. 变量枚举类型HttpStatusCode,响应码的枚举std::map<string, string> headers_;响应头键值对HttpStatusCode statusCode_;响应状态码string statusMessage...

2019-08-21 10:59:11 266

原创 42.muduo学习笔记之http_HttpRequest.{h&cc}

1. 说明对Http请求的封装,这里不再说明Http请求相应的相关知识一个HttpRequest类,可复制这个Http服务器还缺很多东西,主要是为muduo的inspect监控程序提供服务,那个inspect就是对进程信息的一些监控,inspect就不做详细整理了2. 变量枚举类型Method,几种方法的枚举,muduo并没有实现全部方法Version,Http版本的枚举,...

2019-08-21 10:56:42 902

原创 41.muduo学习笔记之net_EPollPoller.{h&cc}

1. 说明一个EPollPoller类,需要了解关于epoll的相关知识,主要是三个函数epoll_create1epoll_waitepoll_ctl2. 变量类型定义EventList,epoll_event结构的列表epollfd_用epoll_create1()返回的epollfd,构造函数中就生成了events_EventList类型...

2019-08-21 10:54:27 232

原创 40.muduo学习笔记之net_PollPoller.{h&cc}

1. 说明一个PollPoller类,在muduo中主要用于调试,在DefaultPoller.cc指定是使用PollPoller还是EPollPoller2. 变量类型定义PollFdList,pollfd结构的列表pollfds_PollFdList类型,如果不懂这个的话要先学一下pollchannels_继承过来的,map<int,Channe...

2019-08-21 10:53:19 186

原创 39.muduo学习笔记之net_Poller.{h&cc}

1. 说明一个Poller类,使用了EventLoop,Channel这时候才发现这是个虚基类…那EventLoop中还使用了这个Poller…有点无语与不理解,而且EventLoop中还有调用Poller::cancel(),但是根本没这个函数…2. 变量类型定义ChannelList,Channel*列表ChannelMap,<int,Channel*>类型的...

2019-08-21 10:42:41 221

原创 38.muduo学习笔记之net_TcpClient.{h&cc}

1. 说明一个TcpClient类,包含了一个Connector对象,使用了EventLoop类noncopyable2. 变量类型定义ConnectorPtrEventLoop* loop_;不解释ConnectorPtr connector_; // avoid revealing Connector用于主动发起连接const string ...

2019-08-21 10:39:07 235

原创 37.muduo学习笔记之net_Connector.{h&cc}

1. 说明一个Connector类,使用了Channel,EventLoop,InetAddress类,功能是主动发起连接noncoayable,enable_shared_from_this这个前面说过,就不赘述了2. 变量类型定义NewConnectionCallback.EventLoop* loop_;所属的EventLoopInetAddr...

2019-08-21 10:38:29 265

原创 36.muduo学习笔记之net_Buffer.{h&cc}

1. 说明一个Buffer类非阻塞网络编程中应用层buffer是必须的,要让程序在write操作上不阻塞,网络库必须给每个tcp connection配置output buffer.在TcpConnection中使用,有两个,分别是inputbuffer和outputbuffer,TcpConnection会从socket读取数据,然后写入inputbuffer,客户代码从inp...

2019-08-21 10:04:00 262

原创 35.muduo学习笔记之net_EventLoopThreadPool.{h&cc}

1. 说明一个EventLoopThreadPool类,使用了EvevtLoop,EventLoopThread类线程池类,muduo的线程池是固定几个线程noncopyable2. 变量类型定义ThreadInitCallbackEventLoop* baseLoop_;与Acceptor所属EventLoop相同string name_;名字...

2019-08-21 10:01:02 234

原创 34.muduo学习笔记之net_TcpServer.{h&cc}

1. 说明一个TcpServer类,这个需要配合TcPConnection类理解使用了Acceptor,EventLoop,EventLoopThreadPool,原子类noncopyable2. 变量类型定义ThreadInitCallbackConnectionMap枚举类型kNoReusePortkReusePortEventLoop* loop...

2019-08-21 09:59:57 286

原创 33.muduo学习笔记之net_TcpConnection.{h&cc}

1. 说明一个TcpConnection类,代码有点长使用了Channel,EventLoop,Socket,Buffer类继承noncopyable,enable_shared_from_this,把当前对象转换成share指针,在connectEstablished()中有用到在连接到来,创建一个TcpConnection对象,立刻使用shared_ptr来管理,引用计数为1.在Ch...

2019-08-21 09:58:48 441

原创 32.muduo学习笔记之net_Acceptor.{h&cc}

1. 说明一个Acceptor类,用于accept接受TCP连接使用了EventLoop,InetAddress,Socket,Channel类Acceptor的socket是listening socket(即server socket).Channel用于观察此socket的readable事件,并回调Acceptor::handleRead(),后者调用accept来接受新连接,并回...

2019-08-21 09:57:49 296

原创 31.muduo学习笔记之net_EventLoopThread.{h&cc}

1. 说明任何一个线程,只要创建并运行了EventLoop,都称之为IO线程,为了方便使用,定义了EventLoopThread类,封装了IO线程.EventLoopThread创建了一个线程,在线程函数中创建了一个EventLoop对象并调用EventLoop::loop使用了EventLoop类noncopyable2. 变量类型定义ThreadInitCallback...

2019-08-21 09:51:45 270

原创 30.muduo学习笔记之net_Channel.{h&cc}

1. 说明一个Channel类, 是selectable IO channel,负责注册与响应IO事件,它不拥有file descriptor.它是Acceptor,Connector,EventLoop,TimeQueue,TcpConnection的成员,生命周期由后者控制2. 变量类型定义EventCallbackReadEventCallback,两种不同的回调函数...

2019-08-21 09:49:31 340

原创 29.muduo学习笔记之net_EventLoop.{h&cc}

1. 说明一个EventLoop类,任何一个线程,只要创建并运行了EventLoop,都称之为IO线程(为了方便使用,定义了EventLoopThread类,封装了IO线程)使用了Channel,Poller,TimerQueue,Timestamp类noncopyable2. 变量类型定义FunctorChannelListlooping_; /* atomic ...

2019-08-21 09:39:24 261

原创 28.muduo学习笔记之net_TimerQueue.{h&cc}

1. 说明用于定时器事件的内部类,用户看不到这个类,这个类维护了一个定时器列表这个文件有一个TimerQueue类,使用到了EvenLoop,Timer,TimerId,Channel类noncopyable定时器使用了timerfd_*系列函数,因为这个系列不会产生信号,在多线程程序中处理信号比较麻烦,这个是当做文件描述符处理,当时间到的时候,这个描述符就变为可读,方便用poll等方式...

2019-08-21 09:38:41 259

原创 27.muduo学习笔记之net_TimerId.{h&cc}

1. 说明用于定时器事件的类,三个定时器相关类中,用户只能看到这个类这个文件有一个TimerId类,就是标识某个定时器noncopyable2. 变量timer_Timer*类型sequence_序列声明TimerQueue是友元类3. 函数构造函数初始化timer_和sequence_...

2019-08-21 09:37:40 272

原创 26.muduo学习笔记之net_Timer.{h&cc}

1. 说明用于定时器事件的内部类,用户看不到这个类这个文件有一个Timer类,使用原子操作Atomic.h和时间戳类Timerstamp.hnoncopyable这个类只是定时器的抽象,并没有调用定时器函数2. 变量callback_TimerCallback类型,回调函数,具体看Callback.hexpiration_时间戳对象,超时时刻interval_...

2019-08-21 09:36:29 228

原创 25.muduo学习笔记之net_Socket.{h&cc}

1. 说明一个socket类,用RAII方法封装socket fd2. 变量sockfd_套接字fd,构造函数中赋值3. 函数构造赋值sockfd_析构调用close()关闭sockfd_fd()返回sockfd_getTcpInfo(struct tcp_info* tcpi)获得tcp信息保存到tcpi中,这是一个结构体,在...

2019-08-21 09:35:41 308

原创 24.muduo学习笔记之net_SocketsOps.{h&cc}

1. 说明没有类,关于sockets的一些函数2. sockets命名空间createNonblockingOrDie(sa_family_t family)生成非阻塞套接字,返回fd,实际就是调用socket()connect(int sockfd, const struct sockaddr* addr);就是对connect()的封装bindOrDie(...

2019-08-21 09:32:58 251

原创 23.muduo学习笔记之net_InetAddress.{h&cc}

1. 说明有一个地址类InetAddress,对IPv4或IPv6地址的封装可复制的2. 变量联合体类型的addr_/addr6_保存IPv4或IPv6地址3. 函数几个构造函数就是看是否是IPv6,和对addr_的赋值StringArg是base库中StringPiece中的一个类,就是对char*类型的封装family()返回addr_.sin...

2019-08-21 09:32:18 413

原创 22.muduo学习笔记之net_Endian.{h&cc}

1. 说明没有类,就是命名空间的一些函数定义字节序转换函数的封装,就是让名字更容易理解…除了htonl等都不是POIXS的,都是Linux特有的,而POIXS系列函数在windows下也可使用2. sockets命名空间hostToNetwork64(uint64_t host64)64位主机字节序转换为网络字节序其他类似,很好理解...

2019-08-21 09:31:39 280 2

原创 21.muduo学习笔记之net_Callback.{h&cc}

1. 说明这个主要是回调函数类型声明吧这个文件没有类,主要是一些声明和类型定义分两个命名空间,muduo和net2. muduo命名空间1. 声明using std::placeholders::_1;C++11新特性:占位符,一般和bind联合使用.bind的时候有参数的话,之前是直接传变量,有占位符后,就可以在用到时候再穿参数2. 函数get_pointer...

2019-08-21 09:31:01 387

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除