代码客:G-TcpServer(IOCP) 1.0 正式版及Demo源码

C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程 一、TrinityCore CMake项目构建。 阅读详情

关键词:

GTcpServer IOCP Socket Tcp Server

 

 

              说明

一、受限制库Dll和lib说明:
    库文件G-TcpServer.lib、G-TcpServer.Dll是受限制的试用版本和Demo配套。
1、最大连接不能超过50
2、发送字节数不能超过50
3、不能设置0读投递、无超时机制
4、其他功能限制

二、版本解读说明
1、版本名带T的表示是受限制的试用版
2、版本名带bata表示非正式版
3、版本名带WChar表示支持WideChar
4、版本号以时间格式累加计数(60进1)和显示

三、文件“G-TcpServer无限制体验版.exe”是无限制的体验版。

四、文件夹
1、Demos文件夹是VC Lib、Dll库及Delphi2010的例程源码,供开发学习
2、G-Sockets文件夹是Lib和Dll库的Delphi和VC的头文件
3、Release/G-Sockets/Dll文件夹是动态库的输出文件夹
4、Release/G-Sockets/Lib文件夹是静态库的输出文件夹

 

               技术

 

1、模块包含处理线程、工作线程和看守线程。
   工作线程负责IO投递工作,并响应投递返回,再把接收的数据投递给处理线程,处理线程调用回调函数给应用层,以此可以在通讯层和应用层之间现实0拷贝数据的功能。模块只有一个看守线程,负责:a、响应Accept事件并投递接受队列;b、效验接受超时(即只连接不发数据)断开连接,防止空连接;c、效验空闲超时(即心跳超时)断开连接。
   按工作量来分,最繁重的是处理线程,其次是工作线程,最闲的是看守线程。可通过OnThread事件回调函数设置线程权限。在此线程模式下,应用层可以在回调函数里处理数据而不必再建立另外的数据处理线程池。

2、线程平衡(可条件编译为自由线程状态)
   为使连接能平衡使用处理线程,每个连接同时只有一个处理线程处理工作线程投递过来的IO返回事件并调用回调函数通知应用层。

3、收发平衡(可条件编译为多投递模式)
   为使连接能平衡使用IO设备,每个连接同时只能投递一个读请求,并通过线程平衡机制保证接收的数据是按顺序的被处理线程处理及通过回调函数传递给应用层;同时也只能投递一个写请求,其余写请求都按顺序放在写队列里面。读写同步都使用临界段。

4、0拷贝技术
   接收数据0拷贝看1项;提供GTcpSvr_AllocGBuf()、GTcpSvr_FreeGBuf()和GTcpSvr_PostSendGBuf()三个函数实现发送数据的0拷贝。

5、0读投递
   为避免内核锁定分页内存过多,可通过设置来采用0读投递来降低吞吐性能从而实现大连接量。

6、HndData回收
   HndData回收有多种方法,但额外会在收发数据这两个频率操作上增加工作量,因此尽量避免在这两个操作时做太多的工作是有必要的。模块均不采用“投递计数”或“投递链表”的方式来判断回收HndData的时机,而是一旦断线立即回收,其他未决投递继续返回时只处理IoData,不对HndData做任何写操作。同时为避免HndData刚收回来但其未决投递还没有完全返回之前就立即被利用的可能性,HndData池采用了FIFO双锁并发链表,该链表通过ExNumber值来实现在最大连接情况下HndData池还有ExNumber个数量使链表不为NULL,通过设置ExNumber数量可实现控制链表末端的HndData出列时间,在这个时间内可以保证断开刚回收的HndData的未决投递能够完全返回。
    HndData池,初始时如下:
    HD1 + HD2 + HD... + HDMaxConnection + HDEx1 + HDEx2 + HDEx... + HDExNumber
     |                                                                     |
    Head------------------------------------------------------------------Tail

    达到最大连接时如下:
    HDEx1 + HDEx2 + HDEx... + HDExNumber
     |                              |
    Head---------------------------Tail

    断开回收一个HndData(HD)后如下:
    HDEx1 + HDEx2 + HDEx... + HDExNumber + HD
     |                                     |
    Head-------(需要T时间HD才能出列)------Tail
    注:T可以通过控制ExNumber值来实现,假定每秒最大可以处理C个连接和断开,需要延时T秒所有未决投递才会完全回收,那么:ExNumber = T * (MaxConnection / C)。实际上每个连接未决投递非常少(因为读写是单投递的),并且工作线程并不处理数据工作量不大,因此T很短,模块默认是3秒。对于服务器而已,一秒能接受的连接量是可知预计的,模块默认是1万,假定MaxConnection=C所以ExNumber是3万。但实际应用中,正常情况下连接率远少于1万/S,尤其是长连接的服务器,即使是短连接的服务器也不会发生这样的连接率。可能的情况是DOS,如果是影响也不大,因为还有MaxConnection控制,超过这个数的连接就立即被CloseSocket了。和频率高的数据收发相比,断线、连接的频率远少于它,在频率低的地方上多做多点工作总比在频率高的地方多做一点工作的好。

7、可伸缩性
   IoData数量可根据初始需要设置,资源不足时模块自动向系统申请内存。为保证HndData的安全性,HndData池还设置了延时出列,刚回收的HndData入列时间必须超过3(或更长)秒钟,如果未达到3秒的,模块自动向系统申请内存。

8、内存管理
   IoData和HndData均采用VirtualAlloc和VirtualFree来向系统操作内存。IoData池采用原子函数InterlockedCompareExchange来操作进出栈。HndData采用单向FIFO双锁并发链表来管理出入列操作。其他小内存需求的均采用静态数组或new操作。

五、内存需求
    每个IoData等于一个分页内存大小,信息头大小为36Byte,有效使用内存是4060Byte,因此对GTcpSvr_AllocGBuf获得的内存写入时不应该超过4060(调用GTcpSvr_GetGbufSize获得),所有IoData占用系统内存是:IoDataCount * PageSize(4096)。每个HndData大小是128Byte,加上每个Socket分配时耗内存约是:540Bytes(此为估计值,应以MS技术文档为准),所有HndData耗系统内存是:HndDataCount * MAX_HNDDATA_AND_SOCKET_SIZE(128 + 600)。其他变量和数组可能耗得内存在10M之下。
    综上,整个模块需求内存量是:GTcpSvr_GetUseMem()

 

exe体验程序及VS2008和DeiphiD2010 Demo下载:

http://d.download.youkuaiyun.com/down/2301404/guestcode

 

  

 

 

 

 

 

2024年C C++最新Win-服务器端 IOCP模型_one-thread-per-client(1),C C++社招面试题 BOOL DeleteClient(vector < PER_HANDLE_DATA*>&g_clientGroup, SOCKET&clientSocket) // 向服务器删除客户端(退出)DWORD WINAPI ServerSendThread(LPVOID lpParam) // 发送消息的函数。DWORD WINAPI AddClient(LPVOID lpParam) // 向服务器添加客户端。BOOL InitNetwork(WORD port) // 初始化网络相关操作。 阅读详情

相关推荐

利用IOCP实现高性能Socket服务器端源码

本文还有配套的精品资源,点击获取 简介:IOCP是Windows中的高效I/O模型,适用于大量并发I/O操作,通过分离I/O操作与通知机制,实现非阻塞式处理请求,提高服务器性能。该示例源码展示了一个基于IOCP和Socket技术的游戏服务器端程序,支持TCP/IP和UDP协议,并且在VC++环境中开发。项目中关键组件包括服务器的启动和初始化、接受新连接、数据收发、错误处理与...

weixin_31961675的博客 974

IOCP模型源代码学习

首先是头文件: IOCPServer.h 1 // IOCPServer.h: interface for the CIOCPServer class. 2 3 //我们要做的就是建立一个IOCP,把远程连接的socket句柄绑定到刚才创建的IOCP上,最后创建n个线程,并告诉这n个线程到这个IOCP上去访问数据就可以了。 4 // 5 ////////////////...

weixin_30932215的博客 454

G-Sockets(IOCP) 2.0 示例项目源码剖析

IOCP,即Input/Output Completion Ports,是Windows平台特有的一种I/O模型,设计用于高效处理大量并发I/O操作。这一模型由操作系统内核管理,允许开发者创建一组端口来处理I/O事件,能够极大提升网络通信性能。G-Sockets 2.0是一个专为Windows平台设计的高性能TCP通信组件,它在IOCP(I/O Completion Ports)模型的基础上,提供了高效、稳定的网络通信能力。G-Sockets 2.0的主要功能包括:支持非阻塞IO操作。

weixin_35920379的博客 786

IOCP模型C++服务端-接收客户端数据并响应客户端,同时管理所有客户端句柄

在连接上的socket上发送数据。shutdown函数禁止一个socket发送数据或者接收数据。s,所要操作的句柄(文件描述符)。如果执行成功,则返回0。否则,返回套接字错误的值,并通过调用WSAGetLastError()函数来检测错误代码。因为socket是双向的,client和发server都可以进行input和output,但是有时候我们需要数据在socekt上进行单向传输,即数据往一个方向传输。单向的socket为半开放的socket。而要实现半开放式,需要用到shutdown()函数。...

田螺姑娘的博客 1817

IOCP的Socket 服务器端源码

以前做游戏服务器端的使用 ICOP 开发的套接口通信程序,可采用TCP/IP ,也可采用UDP,源码里可以设置。实测同时5万个客户端在线连接没有问题。使用VC++开发

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

Windows下IOCP模型 socket服务器端实例 1. 创建服务器socket, 并将socket设置为非阻塞模式 2. bind()绑定IP地此与端口 3. listen() 4. 创建IO完成端口,将socket绑定到IO完成端口上 5. 根据当前机器CPU个数创建工作者线程池 6. 使用AcceptEx()提前创建客户socket,创建个数与CPU个数相关 以上准备工作全部完成 7. 工作者线程池 GetQueuedCompletionStatus()处理 7.1 收到 客户连接事件 后将 客户 绑定到IO完成端口上,并增加一个AcceptEx() 7.2 处理 客户收发事件 7.3 处理 客户 关闭事件 源码使用vs2017 MFC编写

分享一个自己写的IOCP服务器的类源码

工作任务,需要写一个服务端软件,客户端连接数大概有几百台,以后每年以几十台的数量增加,以往的经验都是使用多线程+同步socket网络编程,实现既简单逻辑上又清楚明白,这次写服务端考虑到性能、效率、资源分配等问题肯定是不能这么做了,查了一些资料最终选择IO完成端口这个模型,记得《Windows核心编程》一书中作者曾说过“完成端口恐怕是Windows里最复杂的内核对象”这样的话

flukeshen的博客 5551

给粒子物理萌新的Geant4保姆级入门:从看懂B1示例代码到跑通第一个模拟

本文为粒子物理初学者提供Geant4的保姆级入门指南,从解析B1示例代码到跑通第一个模拟。详细介绍了环境准备、代码解析、可视化系统实战及扩展模拟的方法,帮助新手快速掌握Geant4的基本概念和工具包使用。

weixin_29231725的博客 500

iocp基础

ExistingCompletionPort :现有 I/O 完成端口或 NULL 的句柄,如果此参数指定现有的 I/O 完成端口,则函数将其与 FileHandle 参数指定的句柄相关联,如果此参数为 NULL,则该函数将创建新的 I/O 完成端口。CreateIoCompletionPort创建输入/输出 (I/O) 完成端口并将其与指定的文件句柄相关联,或创建尚未与文件句柄关联的 I/O 完成端口,以便稍后关联。CompletionPort :I/O 完成数据包要发布到的 I/O 完成端口的句柄。

多看多听多总结 480

基于python+flask框架的基于微信小程序的CR公司建设项目信息管理系统-前台(开题+程序+论文) 计算机毕设

特别是随着移动互联网技术的普及,企业对便捷、高效的信息管理系统的需求日益迫切。另一方面,该系统集成了仓管、物料、财务、人事、供应商等多个模块,实现了数据的集中管理和信息共享,有助于企业实现精细化管理,降低运营成本,提升决策效率。:深入调研CR公司的业务需求,明确系统应具备的功能模块,包括仓管员管理模块(物料信息、退回记录、申请信息、仓库信息管理)、财务员管理模块(资金信息管理、采购与租赁款项处理)、人事管理模块、供应商管理模块、项目管理模块(项目信息、设备采购、物料采购、设备租赁)、以及考勤打卡模块等。

zhihao503的博客 959

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo

本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境

qq_33614778的博客 4673

代码客:Iocp Tcp Server(G-TcpServer) 1.0 Demo源码

Iocp Tcp Server(G-TcpServer) 1.0 Demo源码 IDE:VS2008下载:bata 版已停止下载,1.0正式版期待中                说明 一、本压缩包含:1、Demo源码,位于:/Demos/G-TcpServerLibDemo/G-TcpServerLibDemo.vcproj2、G-TcpServer模块头文件文件

码客 卢益贵 ygluu 4621

网络可视化工具netron详细安装流程

netron安装目录1.netron 简介2.不同操作系统下的安装使用方式2.1 在线版本:只要有浏览器就可以2.2 不同操作系统安装使用3.netron支持的网络框架4.netron测试演示 1.netron 简介 在实际的项目中,经过会遇到各种网络模型,需要我们快速去了解网络结构。如果单纯的去看模型文件,脑海中很难直观的浮现网络的架构。 这时,就可以使用netron可视化工具,可以清晰的看到每一层的输入输出,网络总体的架构,而且支持各种不同网络框架,简单好用。 2.不同操作系统下的安装使用方式 2.1

江南研习社 12万+

G-Sockets(IOCP) 2.5 Demo 源码 (VC2008 & Delphi7/2010)下载

       G-Sockets(IOCP)最新版本的Iocp Tcp Server 完成端口服务器通讯模块Demo源码及技术文档,包括粘包处理源码、客户端突破6W连接限制的文档、强大的服务器(Tcp Server)压力测试工具及无限制的EXE服务器程序(供体验测试)。        有关Iocp技术请阅读本博客其他帖子。        声明:未授权的DLL或LIB,是限制版,本人不保证它能正...

码客 卢益贵 ygluu 1万+

手把手教你学Simulink--双足机器人的反步控制方法仿真

本文介绍了在Simulink中基于反步控制方法进行双足机器人仿真研究的步骤。主要内容包括:1)准备工作,包括MATLAB/Simulink安装和相关工具箱配置;2)构建简化双足机器人模型;3)设计反步控制器,阐述其递归设计原理及Lyapunov函数构造方法;4)通过MATLAB Function块实现控制逻辑并连接模型;5)仿真参数配置和结果分析。文章强调反步控制适用于非线性系统,通过逐步构造虚拟控制律保证系统稳定性,并指出需要多次调试和查阅文献来优化控制效果。该教程为研究双足机器人运动控制提供了实用的仿真

MHD0815的博客 151

基于Python的CT骨料图像分割与STL批量导出完整指南

本文介绍了一套完整的Python解决方案,用于CT骨料图像的分割与STL导出。针对CT图像中颗粒粘连、噪声伪影等技术难点,提出基于分水岭算法的分割策略,结合距离变换与标记控制实现颗粒分离。内容包括环境配置、数据读取与预处理、Otsu阈值分割、分水岭算法实现、表面提取与STL导出等关键步骤。教程提供详细代码及解释,帮助读者从CT体数据出发,最终生成每个颗粒的三维网格文件,便于后续定量分析和数值模拟。

huanghm88的专栏 235

分享我写的IOCP:源码+思路

首先说明,下面的代码仅是一个IOCP的demo,很多地方的设计非常差,当然也有一些设计还算可以:)。此篇仅供对IOCP有些了解但又不深入的、需要一个稍微完整示例的、对网络编程感兴趣的同学参考。点击这里下载代码 整个程序的流程如下: 流程完全是无阻塞的,主线程里,将收到的消息全都一次性取出后,然后派发。所有欲发送的消息都缓存起来,等到更新的时候一起发送。有些地方代码没有完善,比如断开连接后,...

weixin_30622181的博客 216

**Coffin-Manson 模型**在半导体功率循环测试中的理论背景、数学形式、应用场景,以及如何使用 **C#** 编程语言进行具体实现

Coffin-Manson 模型最初用于描述金属材料在低周疲劳(Low-Cycle Fatigue, LCF)下的寿命,后来被广泛应用于半导体功率器件(如 IGBT、MOSFET)的可靠性分析,特别是在功率循环测试中。如果你有具体数据(如 CSV 文件)、更复杂的模型要求(如 Bayerer 模型)或特定可视化需求,请提供,我可以进一步优化代码或添加功能!以下代码实现基本模型 ( N_f = A \cdot (\Delta T_j)^{-n} ) 的拟合,生成拟合曲线并预测寿命。我会结合你之前提到的。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 480

C Socket 异步服务器 IOCP 源码

C# Socket 异步服务器 IOCP 源码 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个基于 SocketAsyncEventArgs 的 C# 异步 Socket 服务器源码,该服务器采用了 IOCP(I/O Completion Port)完成端口技术实现。IOCP 是一种高效的多线程 I/O 模型,适用于高并发网络应用场景。 功能特点 异步操...

gitblog_09706的博客 1075

170、电机控制中的温升测试

本文以一次IGBT炸管事故为切入点,深入剖析电机控制中温升测试的实质:不仅是温度测量,更是对铜损、铁损、散热效率等热管理问题的系统验证。作者强调测试前热电偶布置、环境记录、预运行的重要性,提出实时监控电流谐波、绕组电阻、散热梯度等关键参数,并通过损耗分离与冷却系统实测,揭示真实热源。结合温升曲线异常分析与经验建议,强调留余量、仿真结合实测、关注瞬态工况等实践要点,警示温升测试是保障可靠性与安全性的核心环节。

2401_88858637的博客 47

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

iocp简单例子

完整例子复制就可以用,注释全,无任何坑,iocp简单例子(有带网络的iocp与纯iocp的使用例子)、控制台事件例子(有控制台键盘、鼠标、关闭事件)、控制台界面设置

计算机王的博客 945

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Libevent源码分析(七)--- IOCP

IOCP模型 关于iocp模型,网上有很多资料,这里不详细分析,下面这篇文章写的就非常详细: 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

tbyzs的专栏 4078

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

libevent源码剖析之iocp

I/O Completion Ports (IOCP) 是 Windows 上的一种高效 I/O 多路复用机制,用于处理大量并发连接和 I/O 操作。与 select、poll 等机制不同,IOCP 采用了和来高效地处理异步 I/O 操作。:IOCP 允许程序在执行 I/O 操作时不阻塞主线程,I/O 操作会在后台进行,完成后通过完成端口通知主线程。:IOCP 使用线程池来处理并发 I/O 事件,根据负载动态分配工作线程,从而最大化 CPU 和 I/O 资源的利用。

老中医的博客 1265

IOCP服务器/客户端实现 (转)

——A simple IOCP Server/Client Class By spinoza ——译: Ocean    Email: 原文选自CodeProject 源代码: http://www.codeproject.com/KB/IP/iocp_server_client/IOCP-Demo.zip http://www.codeproject.com/KB/IP/

闲云野鹤专栏 2571

iocp 服务器源码,IOCP服务器、客户端(终极网络聊天室代码)

【实例简介】IOCP服务器、客户端(终极网络聊天室代码)【实例截图】【核心代码】终极网络聊天室代码├── Cliect1.0│ ├── Cliect│ │ ├── Cliect.aps│ │ ├── Cliect.cpp│ │ ├── CliectDlg.cpp│ │ ├── CliectDlg.h│ │ ├── Cliect.h│ │ ├── ...

weixin_32803963的博客 737

用“卡尔曼滤波器”来处理“加速度计数据”(加速度,陀螺仪调试)

关键词:SCA3000,ADIS16255,加速度计、陀螺仪数据计算处理算法,卡尔曼滤波器、扩展卡尔曼滤波器。关键词:加速度计和陀螺仪驱动,SCA3000,ADIS16250,ADIS16255,温度、重力加速度、角速度计算方法,SPI总线,SCA3000 模式设置(Mode)、参数设置、读写,ADIS16255读写、参数设置,陀螺仪数据处理 SCA3000,ADIS16255,加速度计、陀螺

码客 卢益贵 ygluu 2万+
上一篇: 代码客:Iocp Tcp Server(G-TcpServer) 1.0 Demo源码
下一篇: 代码客:G-Socket(IOCP) 1.0(Server/Client)例程源码+Server体验程序+强大的压力测试工具
ygluu
博客等级 码龄17年 300粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值