`
iunknown
  • 浏览: 409229 次
社区版块
存档分类
最新评论

用完成端口(IOCP)实现一个简单的服务器框架

阅读更多
IOCP 对于高并发的应用程序提供了良好的支持,使得开发高并发的应用程序的难度降低了很多。
IOCP 作为系统底层的 API ,保持了尽可能高的灵活性,对于很多复杂的情况,IOCP 也一样适用。
这种灵活性是一种双刃剑,对于复杂的情况,没有这种灵活性就没有办法完成工作。
但是对于简单的情况,这种灵活性就带来了额外的负担。

这里将要提到的这个服务器框架(spserver/iocp版),主要是针对以下的这几种典型的应用程序
1.echo/http 类型,server 不需要在多个 client 之间转发消息
2.chatroom 类型,server 在多个 client 之间转发消息

在使用 IOCP 来实现这两类应用程序的时候,会遇到一些共同的问题
1.当连接断开的时候,在 server 端为这个连接分配的资源如何妥善地进行释放
2.如何为每一个 IO 操作设定一个超时时间,以使得 server 能够更好地了解每个连接的当前情况

spserver 通过使用 hash 表的方式来解决资源释放的问题,具体的讨论可以参考
http://groups.google.com/group/dev4server/browse_thread/thread/29a91064931a628e

spserver 通过使用类似 libevent 的 min-heap 来解决 IO 操作超时的问题,具体可以参考
http://groups.google.com/group/dev4server/browse_thread/thread/0978e2e1a5c8e2fb

在上一个版本(0.9)中,spserver 在 windows 平台还是基于 libevent + pthread-win32 来实现的。
最新版本(0.9.1),在 windows 平台改成使用 IOCP + Windows Thread 来重新实现。
最新版本在 Windows 平台已经不再需要依赖第三方的库了。

主页和下载地址
http://code.google.com/p/spserver/
http://spserver.googlecode.com/files/spserver-0.9.4.src.tar.gz

关于 spserver 更多的介绍,请参考
http://iunknown.iteye.com/blog/59804
分享到:
评论

相关推荐

    用完成端口(IOCP)实现一个简单的socket服务器框架.zip

    本项目"用完成端口(IOCP)实现一个简单的socket服务器框架"旨在提供一个基础的示例,帮助开发者理解如何利用IOCP构建高性能的服务器。 IOCP的基本概念是将I/O操作与线程池解耦,当I/O操作完成时,系统会将结果放入...

    完成端口(IOCP) 服务器源码

    Windows下IOCP模型 socket服务器端实例 ... 7.1 收到 客户连接事件 后将 客户 绑定到IO完成端口上,并增加一个AcceptEx() 7.2 处理 客户收发事件 7.3 处理 客户 关闭事件 源码使用vs2017 MFC编写

    iocp完成端口框架实现

    标题“iocp完成端口框架实现”表明我们将探讨如何构建一个基于IOCP的系统框架。这个框架的核心在于利用IOCP的优势,即它可以有效地管理和调度多个并发I/O请求,提高服务器的吞吐量。 IOCP的工作原理是:当一个I/O...

    C# 完成端口 IOCP

    - **PostQueuedCompletionStatus**:使用这个API向IOCP插入一个完成状态,通常在设备驱动或系统底层完成I/O操作后调用。 - **GetQueuedCompletionStatus**:从IOCP获取并处理已完成的I/O操作,此函数会阻塞直到有...

    C# IOCP完成端口模型(简单实用高效)

    实现C#的IOCP模型,首先需要创建一个完成端口,这可以通过`CreateIoCompletionPort`函数完成。然后,为每个I/O操作(如TCP连接)关联这个完成端口,这样当I/O操作完成时,系统就会将结果放入完成端口。在C#中,可以...

    IOCP服务器端框架,用于实现高并发服务器

    自己准备实现一个web服务器学习IOCP而封装的一个框架,能适应高并发(默认我设置是64个)连入及多client同时在线传输数据(最大测试到30000).包括TCP与UDP两种协议的IOCP封装实现。比较好的解决了掉线,死机,超时等...

    c# iocp完成端口 高并发服务器 + log4net日志 + SEH异常捕获 本人已搭建好 你们拿走就直接能用了。。

    一个典型的IOCP服务器架构包括创建IOCP、绑定套接字、设置套接字为非阻塞模式、接收客户端连接、提交读写操作并处理完成回调等步骤。 接下来,log4net是Apache的一个开源项目,提供了一种灵活的日志记录框架,支持...

    iocp完成端口

    - **PiggyStressTestClient**:这可能是一个压力测试客户端工具,用于模拟大量并发连接,测试服务器的负载处理能力。通过模拟真实用户的操作,它可以暴露潜在的性能瓶颈和稳定性问题。 - **PiggyIOCPServer_2008**:...

    IOCP 完成端口模型简单封装

    通过创建一个完成端口对象,系统会将完成的I/O请求放入一个队列中,由工作线程从队列中取出并进行后续处理,这样可以避免了线程频繁地上下文切换,提升了系统性能。 在给定的代码文件中,我们可以看到几个关键组件...

    IOCP完成端口(C#)

    1. **创建完成端口**:使用`CreateIoCompletionPort`函数创建一个完成端口对象。 2. **绑定I/O操作**:为每个socket句柄创建IOCP,使其与完成端口关联。 3. **初始化工作线程**:创建一定数量的线程池,用于处理...

    C#完成端口(IOCP)简单实例源码

    1. **创建完成端口**:首先,我们需要创建一个IOCP对象,这可以通过调用`CreateIoCompletionPort`函数来实现。这个函数返回一个句柄,用于后续的I/O操作。 2. **设置套接字为异步模式**:对套接字执行`...

    Windows下采用IOCP实现的ACE的Proactor框架剖析

    1. **创建完成端口**: 应用程序首先需要创建一个完成端口,这个端口可以关联多个I/O设备或套接字。 2. **关联设备**: 将需要进行异步操作的设备(如网络套接字)与创建的完成端口关联,这样设备的I/O操作就会在完成...

    IOCP.rar_IOCP_UCode io_delphi iocp_iocp delphi_完成端口

    1. 创建完成端口:通过CreateIoCompletionPort函数创建一个完成端口对象,这通常在服务器启动时完成。 2. 关联I/O操作:将套接字或其他文件句柄与完成端口关联,使得所有在此句柄上发起的I/O操作都会通过完成端口...

    IOCP网络通信框架

    IOCP的核心在于创建并管理一个完成端口对象,它作为多线程调度的中心。当一个I/O操作完成时,系统会将完成信息放入完成队列,并通知与该完成端口关联的线程。这种模型允许服务器通过多个线程同时处理多个已完成的I/O...

    C# iocp完成端口TCP服务器源代码(含协议解析)

    总之,“C# iocp完成端口TCP服务器源代码(含协议解析)”是一个有价值的教育资源,它展示了如何利用C#的高级特性构建高性能、健壮的网络服务。通过研究这个项目,开发者不仅可以提升自己的C#编程技能,还能深入了解...

    完成端口模式delphi源码

    1. **创建完成端口**:使用`CreateIoCompletionPort`函数创建一个完成端口对象。这个对象可以与一个或多个设备句柄关联,例如TCP套接字。 2. **关联设备句柄**:将TCP套接字句柄与创建的完成端口关联,这样TCP的...

    IOCP服务器收发、处理数据包的简单框架

    当I/O操作完成时,系统会将一个完成包放入IOCP,包含操作状态、完成码和关联的用户上下文。服务器通过调用`GetQueuedCompletionStatus`或`GetQueuedCompletionStatusEx`从IOCP中取出这些信息,并执行相应的回调函数...

    一个简单的完成端口(服务端客户端)类源代码

    本文将深入探讨完成端口的工作原理、创建与使用,以及如何通过源代码实现一个简单的服务端和客户端。 一、完成端口的工作原理 完成端口基于异步I/O模型,它将I/O操作的调度与执行分离,从而避免了线程上下文切换的...

    c# iocp完成端口 高并发服务器 log4net日志 SEH异常捕获

    在描述中提到的"C# IOCP高并发服务器"实现,意味着开发者已经创建了一个使用IOCP机制的服务器应用,该应用能够处理大量并发连接,保证了服务的响应速度和稳定性。C#语言提供了System.Threading命名空间下的...

    完成端口框架实现源码

    实现一个基于完成端口的框架,首先需要创建一个完成端口对象,通常使用`CreateIoCompletionPort`函数。然后,为每个I/O操作(例如,套接字的接收和发送)关联这个完成端口。接下来,创建线程池,这些线程将等待完成...

Global site tag (gtag.js) - Google Analytics