发表于开发技能专区
2015/12/15 16:50

IOCP模型TCP服务器

主线程创建监听套接字,创建额外工作线程,关联IOCP,负责等待和接受到来的连接。 调用GetQueuedCompletionStatus函数,函数返回: 1 调用失败 2 套接字被对方关闭 3 请求成功完成 程序首先定义per-handle per-IO的操作数据的结构类型 #define BUFFER_SIZE 1024 typedef struct _PER_HANDLE_DATA{ SOCKET s; sockaddr_in addr; }PER_HANDLE_DATA,*PPER_HANDLE_DATA; typedef struct _PER_IO_DATA{ OVERLAPPE...

0
0
发表了博客
2019/06/05 16:33

C#高性能Socket服务器IOCP实现

引言 我一直在探寻一个高性能的Socket客户端代码。以前,我使用Socket类写了一些基于传统异步编程模型的代码(BeginSend、BeginReceive,等等)也看过很多博客的知识,在linux中有poll和epoll来实现,在windows下面 微软MSDN中也提供了SocketAsyncEventArgs这个类来实现IOCP 地址:https://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx NET Framework中的APM也称为Begin/End模式。这是因为会...

0
0
发表了博客
2012/07/24 18:42

IOCP使用时常见的几个错误

在使用IOCP时,最重要的几个API就是GetQueueCompeltionStatus、WSARecv、WSASend,数据的I/O及其完成状态通过这几个接口获取并进行后续处理。 GetQueueCompeltionStatus attempts to dequeue an I/O completion packet from the specified I/O completion port. If there is no completion packet queued, the function waits for a pending I/O operation associated with the completion port to complete. BOOL WINAPI GetQu...

0
1
2016/06/20 13:11

iocp进行SOCKET通信(转载)

当然TCP方式的模型还有事件选择模型。 就是把所有的网络事件和我们的一个程序里定义的事件梆定。 这个有它的好处,可能可以让我们更好的写一个线程来管理 接收与发送。 现在来讲一下一个完成端口模型。 完成端口 一个完成端口其实就是一个通知队列,由操作系统把已经完成的重叠I/O请求的通知 放入其中。当某项I/O操作一旦完成,某个可以对该操作结果进行处理的工作者线程 就会收到一则通知。而套接字在被创建后,可以在任何时候...

0
1
2016/06/20 13:40

iocp进行SOCKET通信(转载)

当然TCP方式的模型还有事件选择模型。 就是把所有的网络事件和我们的一个程序里定义的事件梆定。 这个有它的好处,可能可以让我们更好的写一个线程来管理 接收与发送。 现在来讲一下一个完成端口模型。 完成端口 一个完成端口其实就是一个通知队列,由操作系统把已经完成的重叠I/O请求的通知 放入其中。当某项I/O操作一旦完成,某个可以对该操作结果进行处理的工作者线程 就会收到一则通知。而套接字在被创建后,可以在任何时候...

0
0
发表了博客
2016/06/20 09:39

IOCP里了解到的Nagle算法

Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。Nagle算法于1984年定义为福特航空和通信公司IP/TCP拥塞控制方法,这是福特经营的最早的专用TCP/IP网络减少拥塞控制,从那以后这一方法得到了广泛应用。Nagle的文档里定义了处理他所谓的小包问题的方法,这种问题指的是应用程序一次产生一字节数据,这样会导致网络...

0
0
发表了博客
2016/06/20 13:35

IOCP中的socket错误和资源释放处理方法

前言: 错误处理和socket释放, 是IOCP编程中的一大难点. 本文试图就IOCP设计中经常遇到的这个难题展开论述并寻找其解决方案, 事实上, 文中所述的解决方式不仅仅适用于IOCP, 它同样适用于EPOLL等多种服务器编程的网络模型中, 前提是: 领会这种处理方式的实质. 正文: 在使用IOCP开发时, 大家经常遇到的一个难题是与socket相关的缓冲区释放不当带来的错误, 这种错误通常是由于多次对同一个指针执行了delete操作引起的. 比如, 当在执...

0
0
2016/06/20 13:35

IOCP中的socket错误和资源释放处理方法

前言: 错误处理和socket释放, 是IOCP编程中的一大难点. 本文试图就IOCP设计中经常遇到的这个难题展开论述并寻找其解决方案, 事实上, 文中所述的解决方式不仅仅适用于IOCP, 它同样适用于EPOLL等多种服务器编程的网络模型中, 前提是: 领会这种处理方式的实质. 正文: 在使用IOCP开发时, 大家经常遇到的一个难题是与socket相关的缓冲区释放不当带来的错误, 这种错误通常是由于多次对同一个指针执行了delete操作引起的. 比如, 当在执...

0
0
发表了博客
2015/08/12 21:39

[易语言]线程队列类似IOCP写法

此文开始之前声明为个人理解,如有雷同,请不要打脸。大牛们都飘过吧,给自己做个记号。 在进入正题前,说明一下,所用到的API函数。 InitializeCriticalSection(创建许可证) DeleteCriticalSection(删除许可证) EnterCriticalSection(进入许可区) LeaveCriticalSection(退出许可区) CreateThread(启动线程) SuspendThread(挂起线程) ResumeThread(恢复线程) Sleep(延时) SetEvent(标记信号) ResetEvent(取消...

0
0
发表了博客
2016/06/20 13:35

IOCP中的socket错误和资源释放处理方法

前言: 错误处理和socket释放, 是IOCP编程中的一大难点. 本文试图就IOCP设计中经常遇到的这个难题展开论述并寻找其解决方案, 事实上, 文中所述的解决方式不仅仅适用于IOCP, 它同样适用于EPOLL等多种服务器编程的网络模型中, 前提是: 领会这种处理方式的实质. 正文: 在使用IOCP开发时, 大家经常遇到的一个难题是与socket相关的缓冲区释放不当带来的错误, 这种错误通常是由于多次对同一个指针执行了delete操作引起的. 比如, 当在执...

0
0
2016/06/20 13:35

IOCP中的socket错误和资源释放处理方法

前言: 错误处理和socket释放, 是IOCP编程中的一大难点. 本文试图就IOCP设计中经常遇到的这个难题展开论述并寻找其解决方案, 事实上, 文中所述的解决方式不仅仅适用于IOCP, 它同样适用于EPOLL等多种服务器编程的网络模型中, 前提是: 领会这种处理方式的实质. 正文: 在使用IOCP开发时, 大家经常遇到的一个难题是与socket相关的缓冲区释放不当带来的错误, 这种错误通常是由于多次对同一个指针执行了delete操作引起的. 比如, 当在执...

0
0
发表了博客
2019/03/10 09:04

DELPHI中完成端口(IOCP)的简单分析(1)

DELPHI中完成端口(IOCP)的简单分析(1) 用DELPHI开发网络代码已经有一段时间了! 我发现在网上用VC来实现完成端口(IOCP)的代码很多,但是使用DELPHI来实现的就比较少了。对IOCP讲的清楚的就更少了。在这里我把自己编写DELPHI下的IOCP写出来,希望对刚学完成端口的朋友有个帮助。 首先我们来了解一些在使用IOCP的时候需要使用的一些结构! (1):单IO数据结构 LPVOID = Pointer; LPPER_IO_OPERATION_DATA = ^ PER_IO_OPERATI...

0
0
发表了博客
2018/06/15 15:53

关于IOCP完成端口这个PostQueuedCompletionStatus函数运用问题

PostQueuedCompletionStatus( HANDLE CompletionPort, DWORD dwNumberOfBytesTransferred, ULONG_PTR dwCompletionKey, LPOVERLAPPED lpOverlapped ) 关于这个函数,网上几乎都是......经常用于退出时发送一个模拟的IO完成事件来唤醒在等待中的线程,显然很多人都仅仅用在系统退出的时候作为唤醒线程作用。 然而在一些论文里面,我们才能看到对于这个函数的一些非常有用的论点。只有提及,没有具体的代码。但是这不重要。 因此,...

0
0
发表了博客
2019/12/25 18:09

高性能跨平台网络IO(Reactor、epoll、iocp)总结

今天听了公司内部的讲座,对于之前关于IO一些模模糊糊的地方有了一些新的感想以及体会,故此总结一下。 一、IO模型:Reactor和Proactor Reactor框架工作模式为:用户注册事件,而后Reactor框架监听该事件,当数据到达后,通知用户,而后用户自己完成事件处理。因此用户只需向Reactor提供fd即可。 Proactor框架工作模式为:用户注册事件,而后Proactor框架监听,数据到达后,Proactor完成事件处理,而后返回给用户通知以及处理完...

0
0
发表于DevOps专区
2018/08/01 10:01

tbox v1.6.3 更新,新增基于IOCP的协程支持

此版本主要改进windows下协程的支持,修复了很多稳定性问题,并且实现了基于IOCP的协程io处理。 新特性 #24: 针对windows平台下的协程处理,增加IOCP支持 改进 移除docs目录,放置到独立tbox-docs仓库,减少tbox.zip包大小 支持tinyc编译器 移除被废弃的模块(asio模块,先用coroutine代替) 精简优化容器库内存资源使用 帮助valgrind更好的理解coroutine Bugs修复 修复windows环境变量的中文编码问题 修复后台进程退出问题 修复...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页