网络通信
gaoyi445
源码面前,了无秘密
展开
-
socket通信简介
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket...原创 2018-05-29 23:45:37 · 5186 阅读 · 0 评论 -
EPOLL内核源代码实现原理分析
EPOLL内核源代码实现原理分析epoll的实现主要依赖于一个迷你文件系统:eventpollfs。此文件系统通过eventpoll_init初始化。在初始化的过程中,eventpollfs create两个slub分别是:epitem和eppoll_entry。epoll使用过程中有几个基本的函数分别是epoll_create,epoll_ctl,epoll_wait。涉及到四个重要的数据结构:...转载 2018-05-31 22:18:42 · 1756 阅读 · 0 评论 -
EPOLL的理解和深入分析
搞Linux 服务器开发的人肯定了解 select、poll、epoll,他们都是基于事件驱动的IO多路复用技术,而他们之间的区别网上已经有很多的文章了,大家可以去详细的阅读,我在这里主要想写写我对epoll的底层实现的理解。首先还是先说说 select、poll相比与epoll来说他们效率低下的原因吧:select、poll、epoll是Linux平台下的IO多路复用技术,适合用来管理大量的文件...转载 2018-05-31 22:09:04 · 946 阅读 · 2 评论 -
IO多路复用之epoll总结
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:#include <sys...转载 2018-05-31 20:38:05 · 148 阅读 · 0 评论 -
高并发网络编程之epoll详解
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。本文便来介绍epoll的实现机制,并附带讲解一下select和poll。通过对比其不同的实现机制,真正理解为何epoll能实现高并发。select()和p...转载 2018-05-31 10:00:51 · 178 阅读 · 0 评论 -
Libevent参考手册:使用libevent的DNS:高层和底层功能
译自http://www.wangafu.net/~nickm/libevent-book/Ref9_dns.htmllibevent提供了少量用于解析DNS名字的API,以及用于实现简单DNS服务器的机制。我们从用于名字查询的高层机制开始介绍,然后介绍底层机制和服务器机制。注意libevent当前的DNS客户端实现存在限制:不支持TCP查询、DNSSec以及任意记录类型。未来版本的libeven...转载 2018-05-31 10:00:38 · 609 阅读 · 0 评论 -
Libevent参考手册:连接监听器:接受TCP连接
译自http://www.wangafu.net/~nickm/libevent-book/Ref8_listener.htmlevconnlistener机制提供了监听和接受TCP连接的方法。本章的所有函数和类型都在event2/listener.h中声明,除非特别说明,它们都在2.0.2-alpha版本中首次出现。1 创建和释放evconnlistener接口两个evconnlistener_...转载 2018-05-31 10:00:28 · 410 阅读 · 0 评论 -
Libevent参考手册:evbuffer:缓冲IO实用功能
译自http://www.wangafu.net/~nickm/libevent-book/Ref7_evbuffer.htmllibevent的evbuffer实现了为向后面添加数据和从前面移除数据而优化的字节队列。evbuffer用于处理缓冲网络IO的“缓冲”部分。它不提供调度IO或者当IO就绪时触发IO的功能:这是bufferevent的工作。除非特别说明,本章描述的函数都在event2/b...转载 2018-05-30 22:04:36 · 520 阅读 · 0 评论 -
Libevent参考手册:evbuffer:缓冲IO实用功能
译自http://www.wangafu.net/~nickm/libevent-book/Ref7_evbuffer.htmllibevent的evbuffer实现了为向后面添加数据和从前面移除数据而优化的字节队列。evbuffer用于处理缓冲网络IO的“缓冲”部分。它不提供调度IO或者当IO就绪时触发IO的功能:这是bufferevent的工作。除非特别说明,本章描述的函数都在event2/b...转载 2018-05-30 22:03:21 · 624 阅读 · 0 评论 -
Libevent参考手册:Bufferevent:高级话题
译自http://www.wangafu.net/~nickm/libevent-book/Ref6a_advanced_bufferevents.html 本章描述bufferevent的一些对通常使用不必要的高级特征。如果只想学习如何使用bufferevent,可以跳过这一章,直接阅读下一章。1 成对的bufferevent有时候网络程序需要与自身通信。比如说,通过某些协议对用户连接进行隧道操...转载 2018-05-30 22:02:16 · 332 阅读 · 0 评论 -
libevent参考手册第六章:bufferevent:概念和入门
很多时候,除了响应事件之外,应用还希望做一定的数据缓冲。比如说,写入数据的时候,通常的运行模式是:l 决定要向连接写入一些数据,把数据放入到缓冲区中l 等待连接可以写入l 写入尽量多的数据l 记住写入了多少数据,如果还有更多数据要写入,等待连接再次可以写入这种缓冲IO模式很通用,libevent为此提供了一种通用机制,即bufferevent。bufferevent由一个底层的传输端口(如套接字)...转载 2018-05-30 22:01:31 · 420 阅读 · 0 评论 -
libevent参考手册第五章:辅助类型和函数
译自http://www.wangafu.net/~nickm/libevent-book/Ref5_evutil.html<event2/util.h>定义了很多在实现可移植应用时有用的函数,libevent内部也使用这些类型和函数。1 基本类型1.1 evutil_socket_t在除Windows之外的大多数地方,套接字是个整数,操作系统按照数值次序进行处理。然而,使用Windo...转载 2018-05-30 22:00:22 · 224 阅读 · 0 评论 -
翻译:libevent参考手册第四章:与事件一起工作
译自http://www.wangafu.net/~nickm/libevent-book/Ref4_event.htmllibevent的基本操作单元是事件。每个事件代表一组条件的集合,这些条件包括:v 文件描述符已经就绪,可以读取或者写入v 文件描述符变为就绪状态,可以读取或者写入(仅对于边沿触发IO)v 超时事件v 发生某信号v 用户触发事件所有事件具有相似的生命周期。调用libevent函...转载 2018-05-30 21:59:20 · 276 阅读 · 0 评论 -
翻译:Libevent参考手册第三章:与事件循环一起工作
译自http://www.wangafu.net/~nickm/libevent-book/Ref3_eventloop.html1 运行循环一旦有了一个已经注册了某些事件的event_base(关于如何创建和注册事件请看下一节),就需要让libevent等待事件并且通知事件的发生。接口默认情况下,event_base_loop()函数运行event_base直到其中没有已经注册的事件为止。执行循...转载 2018-05-30 21:58:01 · 196 阅读 · 0 评论 -
libevent参考手册第二章:创建event_base
译自http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html 使用libevent函数之前需要分配一个或者多个event_base结构体。每个event_base结构体持有一个事件集合,可以检测以确定哪个事件是激活的。如果设置event_base使用锁,则可以安全地在多个线程中访问它。然而,其事件循环只能运行在一个线程中。如果需...转载 2018-05-30 21:55:42 · 247 阅读 · 0 评论 -
Libevent参考手册第一章:设置libevent
翻译自:http://www.wangafu.net/~nickm/libevent-book/Ref1_libsetup.htmllibevent有一些被整个进程共享的、影响整个库的全局设置。必须在调用libevent库的任何其他部分之前修改这些设置,否则,libevent会进入不一致的状态。1 Libevent中的日志消息libevent可以记录内部错误和警告。如果编译进日志支持,还会记录调试...转载 2018-05-30 21:53:42 · 461 阅读 · 0 评论 -
Libevent参考手册:前言
翻译自:http://www.wangafu.net/~nickm/libevent-book/Ref0_meta.html转自:http://blog.sina.com.cn/s/blog_56dee71a0100q7j6.html1 从一万英尺外看LibeventLibevent是用于编写高速可移植非阻塞IO应用的库,其设计目标是:v 可移植性:使用libevent编写的程序应该可以在lib...转载 2018-05-30 21:50:53 · 309 阅读 · 0 评论 -
一种自动反射消息类型的 Google Protobuf 网络传输方案
陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice t.sina.com.cn/giantchen 这篇文章要解决的问题是:在接收到 protobuf 数据之后,如何自动创建具体的 Protobuf Message 对象,再做的反序列化。“自动”的意思是:当程序中新增一个 protobuf Message 类型时,这部分代码不需要修改,不需要自己去注册消息...转载 2018-06-06 15:28:23 · 599 阅读 · 0 评论 -
EPOLL的内核实现
1. select/poll的缺点 A. 每次调用时重复的从用户态读入参数 B. 每次调用时全量的扫描文件描述符 C. 每次调用开始,将进程加入到每个文件描述符的等待队列,在调用结束后又把进程从等待队列中删除。 D. 在不修改内核的情况下,select最多支持1024个文件描述符。 2. 文件系统中的一些重要结构在linux中,进程通过file_struct...转载 2018-05-31 22:20:22 · 265 阅读 · 0 评论