随笔分类 - 网络编程
摘要:为什么要造轮子 目前很著名的轮子有libevent,boost等高并发的网络库,可以说著名的网络库我都用过,用过才知道当要实现一些定制化的功能时并不方便,不但要了解底层源码,而且还要进行适当的改造,总有种黑盒开发的感觉,所以在15年我就开始自己封装一些epoll,select模型,当时基于多路复用用
阅读全文
摘要:1、htonl ()和ntohl( ) ntohl( ) 网络顺序转换成主机顺序(长整型) u_long PASCAL FAR ntohl (u_long netlong); htonl () 主机顺序转换成网络顺序 (长整型) u_long PASCAL FAR htonl (u_long hos
阅读全文
摘要:简单谈一谈大并发服务器框架设计的基本思路 基本的服务器框架都是C/S结构的,请求和相应流程是这样的: 这样的框架存在一个很严重的问题,当客户端大并发请求到来,服务器需要进行大量的数据库操作,假设数据库最大连接数为 1000个,此时有10000个请求访问应用服务器,那么应用服务器只能处理1000个请求
阅读全文
摘要:一、Redis简介: Redis为非关系型数据库,Redis是一个Key-Value存储系统。它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset(sorted set有序集合)和hash,Redis支持各种不同方式的排序。数据都是缓存在内存中的,它
阅读全文
摘要:从事网络编程有五年多了,写过自己的Server,读过大部分网络库libevent,redis, muduo等等,市面上的网络用书大多读过,给新人一些建议,主要是从事服务器网络编程后端的同学。 如果你没写过网络编程的代码,也没有这方面的知识,那么该如何下手呢?这个时候不需要盲目看书,先培养一下自己的兴
阅读全文
摘要:所谓udp打洞就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且 可获取客户端A地址和端口号。同样在客户端B发送给服务器udp数据包后,服务器同样在收到B发送过来 的数据包后获取B的地址和端口号,将A和B的地址与端口号分别发送给对方,这样双方可以继续用UDP协议 通信。这
阅读全文
摘要:ECONNRESET是linux环境网络编程产生的错误,错误码为104, WSAECONNRESET是windows环境网络编程产生的错误,错误码为10054 两者产生的原因都一样,分以下几种情况: 1接收端recv或者read, 对端已经关闭连接,recv/read返回该错误 2 对端重启连接,还
阅读全文
摘要:1 设置网络socket非阻塞: u_long has = 1;ioctl(m_sock, FIONBIO , &has); 这个函数很有可能返回success,却并没有设置成功。windows对此有优化,对于linux版本应采用fcntl设置。 总结如下: 2 windows环境下查看错误 3 E
阅读全文
摘要:最近自己的服务器做到序列化这一步了,在网上看了下,序列化的工具有boost 和google的protocol buffer, protocol buffer的效率和使用程度更高效一些,就自己琢磨下把他加到自己的服务器里。 所以这里我先弄一个小的demo去测试如何使用和配置protocol buffe
阅读全文
摘要:最近自己在写一套服务器框架,期间遇到很多问题, 对于Linux或者windows出错情况下可以通过错误码获取错误信息。 为了测试服务器性能,我在客户端开了2000个线程,这样每个线程 都创建socket和服务器通信,连接15个线程,再后来的客户端线程 connect过程中会失败,我另起了一个客户端进
阅读全文
摘要:TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket, 因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,
阅读全文
摘要:libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的。 这个例子在Sample中 这个例子之前讲解过,这次主要看下bufferevent的使用。 第一步找到main函数 main函数 event_base_dispatc
阅读全文
摘要:Bufferevents and evbuffers Every bufferevent has an input buffer and an output buffer. These are of type "struct evbuffer". When you have data to writ
阅读全文
摘要:Events have similar lifecycles. Once you call a Libevent function to set up an event and associate it with an event base, it becomes initialized. At t
阅读全文
摘要:Setting up a default event_base The event_base_new() function allocates and returns a new event base with the default settings. It examines the enviro
阅读全文
摘要:参考libevent官方提供的文档: http://www.wangafu.net/~nickm/libevent-book/Ref1_libsetup.html 这一篇主要翻译libevent多线程的使用接口和文档。 As you probably know if you’re writing m
阅读全文
摘要:libevent框架之前有做过分析,这次是谈谈如何将libevent搭建在vs工作环境下, 并且编写一个demo进行测试。测试过程中会再一次带大家分析消息是怎么传递 的。 我的libevent版本libevent-2.0.22-stable,用对应的vs命令工具进入该目录 我的是Visual Stu
阅读全文
摘要:最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的《Libevent源码深度剖析》, 参考资料: http://blog.csdn.net/sparkliang/article/details/4957667 libevent好处之类的就不赘述了,libeven
阅读全文
摘要:epoll_event结构 epoll_data是一个联合体,有的网络库使用了fd字段,比如redis, 有的使用了u32,比如libiop,之前一直纠结epoll的工作原理 个人认为在epoll_wait之后内核会自动移动epoll_event队列的内容。 因为epoll_wait返回就绪的文件描
阅读全文
摘要:之前总结了redis的通讯流程,基本框架,epoll的封装等等,这次介绍下 redis对于select模型的封装 _rfds和_wfds是读写结合的副本,因为select调用后会将读写集合中未就绪的文件描述符 清除,所以每次用_rfds和_wfds传入,就不用担心原读写集合描述符被清除。 封装的基于
阅读全文