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

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 Tcp Server(G-TcpServer) 1.0 Demo源码

 

IDE:VS2008

下载:bata 版已停止下载,1.0正式版期待中

 

 

              说明

 

一、本压缩包含:
1、Demo源码,位于:/Demos/G-TcpServerLibDemo/G-TcpServerLibDemo.vcproj
2、G-TcpServer模块头文件文件,位于:/G-Sockets/G-TcpServer.h(模块核心文件)
3、G-TcpServer模块Lib文件,位于:/G-Sockets/G-TcpServer.lib(模块核心文件)
4、无限制Demo exe文件:G-TcpServerLibDemo1.0.exe

 

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

 

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

 

四、技术说明
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 + 540)。其他变量和数组可能耗得内存在10M之下。
    综上,整个模块需求内存量是:UseMemSize = IoDataCount * PageSize + HndDataCount * MAX_HNDDATA_AND_SOCKET_SIZE + 10M。

 

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

相关推荐

利用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

IOCP的Socket 服务器端源码

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

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

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

田螺姑娘的博客 1817

完成端口(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编写

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 149

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

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

flukeshen的博客 5551

AI算力瓶颈与系统优化实战指南

AI算力瓶颈已成为制约人工智能发展的关键因素,特别是在处理transformer类模型时,传统的冯·诺依曼架构面临严重的'内存墙'问题。通过硬件加速、系统优化和算法改进的三级策略,可以有效提升资源利用率。在嵌入式AI领域,结合量化、剪枝和专用指令集扩展等技术,能在资源受限设备上实现高效推理。这些优化方法在自动驾驶、工业视觉等场景中已展现出显著价值,推动AI应用从云端向边缘迁移。随着AI算力需求的持续增长,掌握系统优化技能将成为开发者的核心竞争力。

weixin_32597009的博客 339

iocp基础

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

多看多听多总结 480

手把手教你用C语言给STM32写一个Modbus RTU从机库(含完整项目源码)

在工业自动化领域,Modbus RTU协议因其简单可靠的特点,成为RS485总线通信的事实标准。对于嵌入式开发者而言,为STM32等微控制器实现一个高效的Modbus RTU从机协议栈,是开发智能传感器、执行器等设备的必备技能。Modbus RTU从机的核心是一个状态机,需要处理帧接收、CRC校验、功能码解析和响应生成等环节。工业现场总会遇到意想不到的干扰情况,一个健壮的协议栈应该能够优雅地处理各种异常场景,而不是简单地崩溃或死锁。工业现场环境复杂,协议栈必须具备完善的异常处理机制。

weixin_30561425的博客 516

人工智能100问☞第5问:什么是AI三要素?

人工智能的核心三要素是​​数据、算法和算力​​,分别作为AI的“燃料”、“大脑”和“动力”,三者协同驱动智能系统的学习、推理与决策能力。

bjdx_001的博客 1991

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

关键词:GTcpServer IOCP Socket Tcp Server                说明一、受限制库Dll和lib说明:    库文件G-TcpServer.lib、G-TcpServer.Dll是受限制的试用版本和Demo配套。1、最大连接不能超过502、发送字节数不能超过503、不能设置0读投递、无超时机制4、其他功能限制二、版本解读说明1、版本名

码客 卢益贵 ygluu 4936

告别JTAG!用Artix-7和SPI Flash实现FPGA远程升级的保姆级教程

本文详细介绍了如何利用Artix-7 FPGA和SPI Flash实现FPGA远程升级(OTA)的完整方案。通过硬件连接、Vivado工程配置和STM32模拟更新等步骤,帮助开发者告别传统的JTAG烧录方式,实现高效、安全的远程固件更新,特别适用于嵌入式系统开发中的现场维护场景。

weixin_33964987的博客 363

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

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

weixin_30622181的博客 216

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3129

SAP NetWeaver Business Client (NWBC) 的深入解析

SAP NetWeaver Business Client(NWBC)作为 SAP 提供的一种用户界面,旨在为终端用户提供无缝集成传统 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序的体验。SAP NetWeaver Business Client(NWBC)是 SAP 推出的用户界面,旨在为终端用户提供单一入口,集成传统的 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序。在实际业务场景中,NWBC 的应用提升了用户的工作效率和体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1601

C Socket 异步服务器 IOCP 源码

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

gitblog_09706的博客 1075

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 60

iocp简单例子

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

计算机王的博客 945

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

tbyzs的专栏 4078

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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万+

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

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

weixin_32803963的博客 737

一个简单的IOCP(IO完成端口)服务器/客户端类(中文版)

一个简单的IOCP(IO完成端口)服务器/客户端类 ——A simple IOCP Server/Client Class By spinoza 原文【选自CodeProject】 http://www.codeproject.com/Articles/10330/A-simple-IOCP-Server-Client-Class 源代码: http://www.codeproject

谦言万语的专栏 6008

RISC-V单片机快速入门05-串口助手发送AT指令启动TCP Server

前言 本节开始,我们学习使用GD32VF103的串口驱动ESP-01S模块,本文先介绍下ESP-01S模块的基本用法。 一、基础知识 1.ESP-01S简介 ESP-01S是体积超小的802.11b/g/n Wi-Fi SOC模块,采用低功率32位CPU,可兼作应用处理器,主频最高可达160MHz,内嵌Lwip协议栈,支持STA/AP/STA+AP工作模式,采用通用AT指令,可以方便进行开发。 引脚说明如下所示: 正常工作接线: 烧录接线: 二、AT指令示例 1. AP模式下的TCP Server通

weixin_45006076的博客 1067
上一篇: 完成端口(IOCP)的另一种设想——Socket与CompletionPort的多次关联
下一篇: 代码客:G-TcpServer(IOCP) 1.0 正式版及Demo源码
ygluu
博客等级 码龄17年 300粉丝 62原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值