网络
风云来
这个作者很懒,什么都没留下…
展开
-
select的套接字数量的限制
在很多比较各种网络模型的文章中,但凡提到select模型时,都会说select受限于轮询的套接字数量,这个数量也就是系统头文件中定义的FD_SETSIZE值(例如64)。但事实上这个算不上真的限制。C语言的偏方:在C语言的世界里存在一个关于结构体的偏门技巧,例如: typedef struct _str_type{ int _len; c原创 2013-03-26 00:32:06 · 4127 阅读 · 0 评论 -
游戏服务器之多线程发送
本文讨论的游戏架构设计中,分为两进程(逻辑服务器进程和数据服务器进程),其中逻辑服务器进程包含多个逻辑网关,单个逻辑网关中含4类线程,发送线程是其中一种并在一个逻辑网关中存在多个,用来处理发送业务。原创 2014-02-11 19:09:27 · 1559 阅读 · 0 评论 -
ACE的主动线程对象ACE_Task
我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一些不够"优雅"的地方。那一章中的大多数程序都被分解为函数、而不是对象。这是因为ACE_Thread包装需要一个全局函数名、或是静态方法作为参数。随后该函数(静态方法)就被用作所派生的线程的"启动点"。这自然就使得程序员要为每个线程写一个函数。如我们已经看到的,这可能会导致非面向对象的程序分解。ACE_Task对常用线程处理进原创 2014-03-09 15:15:54 · 1447 阅读 · 0 评论 -
网络编程之TCP与UDP
1.TCP与UDP在概念上的区别:Tcp是一种面向连接的,可靠的字节流服务。(设有数据包编号与差错控制机制。)特点:由于网络的复杂性,传输信息时,数据包可能会丢失,差错控制中的确认机制在接收到数据包是发送确认信息,若是数据包丢失,则回发数据包编号,让对方重新发送;由于网络的复杂性,传输信息时有多种网络传送途径可以选择,数据包被接收的顺序与发送顺序不同,可以根原创 2014-04-03 21:43:08 · 910 阅读 · 0 评论 -
网络协议消息分片
很多人对网络大消息分片比较困惑,主要是一般情况下应用层消息不会超出发送窗口缓存(可以设置64k字节)。但实际上tcp/ip协议对所有超出分片字节的网络消息都会进行分片、编号。在应用层的自定义协议,使用tcp协议的情况下,大消息分片要编号,依赖tcp协议向上提供的有序特性并检查编号的递增性,(否则不是同一个消息,有可能是对端网络连接断开等原因),需要有结束标记。原创 2014-12-05 12:01:05 · 2347 阅读 · 0 评论 -
从绑定网卡获取ip
在配置文件里配置ip的话就会出现每部署一个机器就要改ip。但是如果是绑定网卡就可以自动识别ip。代码如下:const char* getIPByIfName(const char* ifName){ int s; struct ifreq ifr;//接口结构(if.h) struct char *none_ip = "0.0.0.0"; if(NULL == ifName)原创 2015-02-12 11:54:32 · 872 阅读 · 0 评论 -
网络模型
1. OSI网络分层参考模型 网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议。这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个主要原则是确保目标系统有效且效率高。为了提高效率,每个协议只应该注意没有被其他协议处理过的那部分通信问题;为了主协议的实现更加有效,协议之间应原创 2013-04-27 21:31:52 · 844 阅读 · 0 评论 -
TCP协议分析
TCP提供了一种面向连接的、可靠的字节流服务,在连接双方在通信前需要预先建立一条连接。TCP特点如下(提供了协议规则来保障通信链路的可靠性):原创 2014-04-04 11:16:25 · 2670 阅读 · 0 评论 -
TCP time_wait 的存在意义
近来网站随着访问量的增加,服务器的压力也随之上升,一个很明显的状况便是服务端产生了大量的TIME_WAIT状态,它究竟是什么、对系统有何影响、为什么很多人对它如此敏感? Google一下TIME_WAIT会有成千上万的文章,但总是别人的,今天自己整理一下对TIME_WAIT的认识。 TCP连接的终止 TCP建立一个连接至少需要交换三个分组,也因此称之为TCP的三路握手(three-原创 2014-04-24 21:19:51 · 2582 阅读 · 0 评论 -
libev源码分析libev数据结构整理
这里选取的版本为最新版:libev-4.04。libev的代码很简练,除了对高效I/O模型等的封装文件,核心文件就两个:ev.h和ev.c,其中ev.c大概4000行左右。代码大量用到了宏,并且宏还嵌套了宏,为了便于理解libev的代码,这里对宏进行了还原。ev_watcher结构体(其成员为其它结构的公共部分):typedef struct ev_watcher转载 2013-11-06 12:12:26 · 1220 阅读 · 0 评论 -
使用 libevent 和 libev 提高网络应用性能
管理多个 UNIX 网络连接构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。有许多解决方案,但是 libevent 库和 libev 库能够大大提高性能和事件处理能力。在本文中,我们要讨论在 UNIX® 应用程序中使用和部署这些解决方案所用的基本结构和方法。libev 和 libevent 都可以在高转载 2013-11-06 12:28:28 · 980 阅读 · 0 评论 -
libev入门
libev是什么要了解libev,有必要先了解libevent。早在2000年libevent就发布了第一个版本。通过libevent的编程接口,可以实现在指定的事件发生后调用回调函数,指定的事件是文件描述符上的读写事件等。除了文件描述符的事件,libevent还支持定时器以及信号等。欲详细了解libevent可以参照其站点:http://monkey.org/~provos/libeve转载 2013-11-06 12:29:33 · 1280 阅读 · 0 评论 -
http压力测试
简介Siege是一个压力测试和评测工具,设计用于WEB开发这评估应用在压力下的承受能力:可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。Siege是一个多线程http负载测试和基准测试工具。Siege:这是Linux系统下的一个测试工具,完全使用C语言实现,可以对HTTP和FTP服务器进行负载和性能测试。通过使用S原创 2015-12-28 17:30:22 · 2171 阅读 · 0 评论 -
URL转义意义和其c++实现
URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符、汉字、特殊符号等等,所以要对URL进行转换。这个过程就叫做URL编码,或者叫URL转义,实质上就是将包含非ASCII字符的URL转换为有效的ASCII字符格式。在进行URL编码时,每一个非ASCII字符都被替换为“%hh”格式,其中hh为两位十六进制数,它对应于该字符在原创 2015-12-25 13:06:37 · 4476 阅读 · 0 评论 -
网卡收发模式及使用
RSS receive side scaling,网卡多队列,需要硬件支持。网卡接收到网络数据包后,要发送一个硬件中断,通知CPU取数据包。默认配置,都是由CPU0去做。RPS receive packet steering,向某个CPU发送一个软中断,来接收数据包,并递交给应用程序。RFS receive flow streering,维护两种hash表,实现将软中断分散到多颗C原创 2014-12-29 14:10:56 · 3786 阅读 · 0 评论 -
epoll的应用方式
翻译的man epoll的:在man epoll中的Notes说到: EPOLL事件分发系统可以运转在两种模式下: Edge Triggered (ET) Level Triggered (LT)接下来说明ET, LT这两种事件分发机制的不同。我们假定一个环境:1. 我们已经把一个用来从管道中读取数据的文件句柄(RFD)添加到epoll描述符2. 这个时原创 2013-04-09 02:12:42 · 1316 阅读 · 0 评论 -
epoll 内核分析
epoll是由一组系统调用组成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, in原创 2013-11-07 02:10:08 · 1188 阅读 · 0 评论 -
套接字的recv返回错误和处理
extern ssize_t recv(int __fd,void *__buf,size_t __n,int __flags);原创 2013-04-05 04:18:57 · 5363 阅读 · 0 评论 -
select、poll、epoll 网络模型比较
select、poll、epoll 网络模型比较原创 2013-03-25 22:46:18 · 1262 阅读 · 0 评论 -
解码websocket (c++)
websocket 是web常用的协议,可用来支持自定义协议。以下是用c++根据websocket握手协议websocket协议格式来处理websocket 协议解码(1)第一步,websocket升级协议判断是否是http协议,并且是websocket的升级握手协议E_CODEC_STATUS CodecWebSocketJson::Decode(tagConnectionAt...原创 2017-07-23 03:01:42 · 5476 阅读 · 0 评论