
网络
pud_zha
这个作者很懒,什么都没留下…
展开
-
winsock的部分总结
1.连接,要适用AcceptEx + WSAAsyncEvent来提供适量的连接数 connect上,boost::asio使用的是select()实现的reactor方法。2.必须使用memory pool/cache3.收发数据适用gatter-scatter模式:收集到一定量的buffer后再send,一次尽量多读取数据,然后传递给业务层。4.要明白IOCP适合高并发,大量原创 2013-03-21 19:42:35 · 925 阅读 · 0 评论 -
libuv服务端
服务端:uv_tcp_init(uv_loop_t*loop, uv_tcp_t* handle):将各个变量初始化,并将handle插入双链表中。 uv_tcp_t:该类型包含socket成员变量。 uv_tcp_accept_t:内部使用类型,包含SOCKET accept_socket,缓冲区和event_handle, wait_handle调用uv_liste原创 2013-01-14 15:35:16 · 1099 阅读 · 0 评论 -
libuv之用CRITICAL_SECTION实现读写锁
typedef union { /* srwlock_ has type SRWLOCK, but not all toolchains define this type in */ /* windows.h. */ SRWLOCK srwlock_; struct { uv_mutex_t read_mutex_; uv_mutex_t write_m原创 2013-01-06 18:25:10 · 1639 阅读 · 0 评论 -
libuv之基础
TCP客户端连接步骤:① .连接方法Uv_loop_t *loop = uv_default_loop(); uv_tcp_t *client = malloc…;uv_connect_t* connect_req = malloc…; uv_tcp_init(loop, client) uv_tcp_connect(connect_req, client,原创 2013-01-06 16:13:18 · 13262 阅读 · 2 评论 -
IOCP一些学习
ON_EN_CHANGE(IDC_CONTENT, &CClientDlg::OnEnChangeContent)1.数据的解析属于业务层的逻辑,不要放到网络层来2.CRITICAL_SECTION / MUTEXT 封装时注意把拷贝构造函数和复制构造函数私有化private:CCriSec(const CCriSec& cs);CCriSec operator = (cons原创 2012-12-25 14:45:47 · 749 阅读 · 0 评论 -
为什么要自己给SOCKET绑定一个值
The uniqueness of socketA normal SOCKET number itself is unique. But the OS assigns the socket number arbitrarily, the latest closed socket number could be re-assigned to a new socket connected ri转载 2012-12-25 10:23:13 · 1032 阅读 · 0 评论 -
send/recv的超时模拟
Server如果只是不接受,send依旧成功如果退出不做任何处理,send返回失败只有将Server挂起,send才返回time-out因此,必须自己设计协议来保证两端的完整通信原创 2012-11-23 15:53:47 · 535 阅读 · 0 评论 -
网络小记4
1.Overlapped IO模型:在处理线程中①Wait ForMultipleEventObjects②调用GetOverlappedResult对①关联的SOCKET进行结果验证If the WSAGetOverlappedResult function succeeds, the return value isTRUE. This means that your ove原创 2012-11-18 21:45:59 · 490 阅读 · 0 评论 -
使用WSASend改善网络程序的性能
socket本身有一个send函数,这个函数的只能一次发送一个缓冲区,这对于在发送大量数据的时候或者数据包很多的时候就可能导致可能导致系统的低性能,主要原因在于调用太多次的send函数,导致从用户态到核心态的不断切换,而耗费了当前的CPU时钟周期。那么解决办法就是减少调用send的次数,一种办法就是使用一个大一点的BUFFER,在发送数据的时候将多个数据包的内容COPY到这个BUFFER中转载 2012-11-23 22:33:51 · 659 阅读 · 0 评论 -
clsoesocket, shutdown
closesocket shutdown:1.closesocket:关闭资源,shutdown关闭连接(reuse socket问题?)2.shutdown对udp没影响3.SO_LINGER:如果数据在关闭前发送就是graceful close,如果直接关闭就是hard clsoe这个选项应该只在block下使用,在non-block下,调用closesocket()会原创 2012-11-23 10:56:13 · 717 阅读 · 0 评论 -
高并发服务器适时投递accept的方法
On Windows 2000 and later versions, Winsock provides a mechanism for determining if an application is running behind in posting adequateAcceptEx calls. When creating the listening socket, associate转载 2012-11-20 17:27:32 · 1092 阅读 · 0 评论 -
关于高并发服务器的listen函数参数设置
int listen(int fd, int backlog);socket系统调用listen只被tcp 服务器使用,他做两件事:1. 将未链接的套接口转换为被动套接口,指示内核接受向此套接口的连接请求,调用此系统调用后tcp 状态机有close转换到listen.2.第二个参数制定了内核为此套接口排队的最大连接个数。关于第二个参数,对于给定的监听套接口,内核要维护两个队转载 2012-11-20 15:55:32 · 3150 阅读 · 0 评论 -
High performance IOCP
IO Completion Ports provide a specialised notification mechanism for completed asynchronous I/O. Completed I/O is queued at an object called a completion port which then calls a programmer-supplied ca原创 2012-09-05 18:51:22 · 752 阅读 · 0 评论 -
IOCP连接关闭
及时监测连接被动关闭 除非有特别要求,否则你应该总是对每个连接保持一个挂起的接收pending io(使用WSARecv投递)。如果用户主动关闭连接,你的GetQueuedCompletionStatus调用将返回成功,但接收到的数据长度为0,你能根据这点检测连接是否已被对方关闭。如果连接被重置或者io被取消(如果你调用了CancelIo的话),GetQueuedC转载 2013-01-21 15:26:44 · 4378 阅读 · 0 评论 -
Designing High-Performance Windows Client/Server Socket Classes
Designing High-Performance Windows Client/Server Socket Classes Author: Sahlan Diver, ContractorDate: Jan 2009Revised: April 2009Revised May 2nd 2009 after further simplifications to the cod转载 2012-09-05 16:14:48 · 1809 阅读 · 0 评论 -
网络小计5
1.host 和 ip 转换char *ip = "www.baidu.com";int value = inet_addr(ip);if( value == INADDR_NONE ){hostent *phost = gethostbyname(ip);int i = 0;while( phost->h_addr_list[i] != NULL ) //注意:不原创 2012-11-22 15:56:32 · 810 阅读 · 0 评论 -
65000个有效连接的IOCP封装类
关于这个类的几点总结:1.发送数据最大限制在MTU之类2.使用PreAllocate,分配内存时,同时为每片内存附加一个小结构体,指明该内存是否被使用,在析构时,只是设定为未使用,以使内存复用3.在Server端启动之前,先准备内存,并使用AcceptEx,缓冲大小设为04.将数据的接收和处理分开在不同的线程处理5.DWORD WINAPI WorkerThreadDumm原创 2012-12-26 17:55:04 · 881 阅读 · 0 评论 -
编写IOCP时的几个注意事项(转自mirosoft)
TIP 1: Use Winsock2 IOCP-capable functions, such as WSASend and WSARecv, over Win32 file I/O functions, such as WriteFile and ReadFile. 提示1:尽量使用WSASend和WSARecv进行数据收发Socket handles from Micro转载 2013-05-09 14:37:59 · 1040 阅读 · 0 评论 -
网络小结6
使用私有堆的原因1、避免和Default Heap的new 、delete操作符同步,提高性能2、分配的内存大小是固定的,减少内存空洞http://highscalability.com/blog/2013/5/13/the-secret-to-10-million-concurrent-connections-the-kernel-i.htmlhttp://www.k原创 2013-05-16 11:19:34 · 676 阅读 · 0 评论 -
使用IOCP需要注意的一些问题~~(不断补充)
转自:http://www.cppblog.com/johndragon/archive/2008/09/16/21845.html1- 不要为每个小数据包发送一个IOCP请求,这样很容易耗尽IOCP的内部队列.....从而产生10055错误.2- 不要试图在发送出IOCP请求之后,收到完成通知之前修改请求中使用的数据缓冲的内容,因为在这段时间,系统可能会来读取这些缓冲.转载 2013-05-03 17:49:38 · 1024 阅读 · 0 评论 -
IOCP不可忽视的细节
转自:http://mowen99.iteye.com/blog/1233932IOCP构架之所以公认高效,核心就在于异步IO。在网上纷纷为之膜拜之余,很少看到对稳定性或性能优化的观点。仔细想想,任何技术都有有利的一面,自然也有有弊的一面,这才符合辩证法思想。 我把自己在编写IOCP构架时重点处理的几个地方交代一下,如果你想认真写好一个稳定的IOCP服务端,建议重新规划以下几个细节。转载 2013-05-03 17:22:36 · 835 阅读 · 0 评论 -
详谈高性能TCP服务器的开发
转自:http://www.cnitblog.com/beifangying/archive/2008/07/24/47096.aspx对于开发一款高性能服务器程序,广大服务器开发人员在一直为之奋斗和努力.其中一个影响服务器的重要瓶颈就是服务器的网络处理模块.如果一款服务器程序不能及时的处理用户的数据.则服务器的上层业务逻辑再高效也是徒劳.所以一个服务器程序的网络处理能力直接影响到整个服务器的转载 2013-05-16 15:44:38 · 1337 阅读 · 0 评论 -
socket error 10053,10054究竟是怎么引起的
贴2段能稳定重现10053的代码,下面是客户端:[cpp] view plaincopyWORD VersionRequested; WSADATA WsaData; VersionRequested = MAKEWORD(2, 2); if (WSAStartup(VersionRequested,转载 2013-05-15 18:18:40 · 1643 阅读 · 1 评论 -
[win32] Winsock 中应使用 DisconnectEx 关闭连接
在 maillist 上看到一则讯息,使用 closesocket() 只是让 OS 回收你的 socket,其实并没有给对方(peer)发送 FIN。因此对方(peer)在下次 recv() 的时候,会收到 "reset by peer" 的错误。而要主动给对方(peer)发送 FIN,要使用 DisconnectEx() 函数。而 MSDN 告知,DisconnectEx() 函数转载 2013-04-28 15:35:49 · 1748 阅读 · 0 评论 -
IOCP编程注意事项
1、每个连接同时最好只有一个待决的WSARecv。IOCP不保证多个待决WSARecv情况下先投递的WSARecv就一定会先得到完成通知。因此,多个待决WSARecv可能导致数据乱序,无谓增加代码复杂性。 2、投递0长度缓冲区的WSARecv可以不占用非分页内存,避免WSAENOBUFS错误。 3、每个连接同时最好只有一个待决的WSASend。发送数转载 2013-04-28 15:03:42 · 765 阅读 · 0 评论 -
网络小计2
1.对于要处理众多小连接的服务器,需要投递更多的AcceptEx检查系统是否有足够AcceptEx的一个方法是:将WSAEventSelect关联到FD_ACCEPT,如果有连接到来而没有足够的AcceptEx时,注册事件会被触发AcceptEx的一个好处是:接收连接同时会接受数据,For servers whose clients send an initial reques原创 2012-09-28 11:07:51 · 729 阅读 · 0 评论 -
WSAEWOULDBLOCK错误
搜索了一下论坛里关于send时产生WSAEWOULDBLOCK时的处理办法,得出如下结论: 1.产生这个错误只是说明out buffer已经满了,不代表出错. 2.可以等待FD_WRITE消息,此时将没有发送完成的数据再次发送出去. 但还是有疑问,我的问题如下: 1.我上面的两条结论正确吗? 2.关于在FD_W转载 2012-08-30 19:27:32 · 2193 阅读 · 0 评论 -
网络小计1
1.使用同步SOCKET就用select模型,并且最好带一个超时2.Assuming 0 is an invalid socket handle value. Uncontrollably lame.3the proper closure of a connected stream socket involves:call shutdown() with the how e原创 2012-09-27 17:41:42 · 463 阅读 · 0 评论 -
send 和 WSASend性能比较
socket本身有一个send函数,这个函数的只能一次发送一个缓冲区,这对于在发送大量数据的时候或者数据包很多的时候就可能导致可能导致系统的低性能,主要原因在于调用太多次的send函数,导致从用户态到核心态的不断切换,而耗费了当前的CPU时钟周期。那么解决办法就是减少调用send的次数,一种办法就是使用一个大一点的BUFFER,在发送数据的时候将多个数据包的内容COPY到这个BUFFER中转载 2012-09-30 01:02:21 · 11949 阅读 · 0 评论 -
msdn:when to use udp
when sending smaller amounts of noncritical or repeatable data, use UDP as opposed to TCP to reduce the overhead associated with connection establishment and maintenance. If the same data must be sent原创 2012-08-30 20:01:05 · 596 阅读 · 0 评论 -
HTTP General header:Trailer
Trailer常用头域值指明了在以块(chunked)传输编码消息里的尾部(trailer)里用到的头域。 Trailer = "Trailer" ":" 1#field-name一个http/1.1消息会包含一个Trailer头域,如果它利用了块(chunked)传输编码并且编码里的尾部(trailer)不为空。这样做是为了使接收端知道块(c转载 2012-08-30 18:17:13 · 5486 阅读 · 0 评论 -
HTTP协议详解
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。转载 2012-08-30 17:37:16 · 1127 阅读 · 0 评论 -
Delayed ACK
delayed ack algorithm也就是中所谓的"经受时延的确认"(翻译得真饶舌 = =||)。在RFC1122中提到delayed ack 的概念: " A host that is receiving a stream of TCP data segments can increase efficiency in both the Intern转载 2012-08-29 13:51:16 · 3105 阅读 · 0 评论 -
TCP/IP慢启动
为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法,再后来在TCP NewReno中又转载 2012-08-29 13:39:05 · 1783 阅读 · 0 评论 -
HTTP/1.1 Range和Content-Range
假设你要开发一个多线程下载工具,你会自然的想到把文件分割成多个部分,比如4个部分,然后创建4个线程,每个线程负责下载一个部分,如果文件大小为403个byte,那么你的分割方式可以为:0-99 (前100个字节),100-199(第二个100字节),200-299(第三个100字节),300-402(最后103个字节)。 分割完成,每个线程都明白自己的任务,比如线程3的任务是负责下转载 2012-08-30 13:43:59 · 9877 阅读 · 0 评论 -
A Reusable Windows Socket Server Class With C++
A Reusable Windows Socket Server Class With C++ Contributed by Len Holgate 摘自:http://www.devarticles.com Ever thought of writing your own Windows socket server class? In this article Len shows y转载 2012-08-29 20:35:44 · 1044 阅读 · 0 评论 -
The C10K problem
如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了。 现在的计算机也很强大了,你只需要花大概$1200就可以买一个1000MHz的处理器,2G的内存, 1000Mbit/sec的网卡的机器。让我们来看看--20000个客户,每个为50KHz,100Kbyes和 50Kbit/sec,那么没有什么比为这两万个客户端的每个每秒从硬盘读取4千字节然转载 2012-08-29 20:28:57 · 1484 阅读 · 0 评论 -
再探Linux下的TCP延迟确认机制
前面有一文简单写了一下Linux下的延迟确认机制,但当时不求甚解,后来陆陆续续做又了一些分析,于是就有了这篇文章。案例一:某同事随手写个压力测试程序,其实现逻辑为:每秒钟先连续发N个132字节的包,然后连续收N个由后台服务回显回来的132字节包。其代码大致如下: 1: char sndBuf[132]; 2: char rcvBuf[132]; 3: whil转载 2012-08-29 18:12:56 · 1677 阅读 · 0 评论 -
Windows SOCKET 缓存/缓冲区 相关了解
对于开发大响应规模的Winsock应用程序而言,对Windows NT和Windows 2000的套接字架构有基本的了解是很有帮助的。与其他操作系统不同的是,WinNT和Win2000的传输协议层并不直接给应用程序提供socket风格的接口,不接受应用程序的直接访问。而是实现了更多的通用API,称为传输驱动接口(Transport Driver Interface,TDI).这些API把Win转载 2012-08-29 15:16:07 · 4457 阅读 · 0 评论 -
设置SOCKET的发送与接收缓冲区 .
2011-01-18 10:55 2555人阅读 评论(1)收藏举报主 题: 浅析:setsockopt()改善程序的健壮性 作 者: gdy119 (夜风微凉) 不断的收到coolmei25 (梅生)的答谢,我都不好意思了(我都没帮到他),下面写出我在网络编程中的一点心得体会,希望对他(^_^也对大家)有帮助:1. 如果在已经处于 ESTABL转载 2012-08-29 15:20:01 · 3777 阅读 · 0 评论