最近有项目要做一个高性能网络服务器,去网络上搜到到的都是C++版本而且是英文或者简单的DEMO,所以自己动手写了C#的DEMO。
网络上只写接收到的数据,没有说怎么处理缓冲区数据,本DEMO简单的介绍如何处理接收到的数据。
简单易用,希望对大家有用.1、在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用。
请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。
2、我的SocketAsyncEventArgsPool类使用List对象来存储对客户端来通信的SocketAsyncEventArgs对象,它相当于直接使用内核对象时的IoContext。
我这样设计比用堆栈来实现的好处理是,我可以在SocketAsyncEventArgsPool池中找到任何一个与服务器连接的客户,主动向它发信息。
而用堆栈来实现的话,要主动给客户发信息,则还要设计一个结构来存储已连接上服务器的客户。
3、对每一个客户端不管还发送还是接收,我使用同一个SocketAsyncEventArgs对象,对每一个客户端来说,通信是同步进行的,也就是说服务器高度保证同一个客户连接上要么在投递发送请求,并等待;
或者是在投递接收请求,等待中。
本例只做echo服务器,还未考虑由服务器主动向客户发送信息。
4、SocketAsyncEventArgs的UserToken被直接设定为被接受的客户端Socket。
5、没有使用BufferManager类,因为我在初始化时给每一个SocketAsyncEventArgsPool中的对象分配一个缓冲区,发送时使用Arrary.Copy来进行字符拷贝,不去改变缓冲区的位置,只改变使用的长度,因此在下次投递接收请求时恢复缓冲区长度就可以了!如果要主动给客户发信息的话,可以new一个SocketAsyncEventArgs对象,或者在初始化中建立几个来专门用于主动发送信息,因为这种需求一般是进行信息群发,建立一个对象可以用于很多次信息发送,总体来看,这种花销不大,还减去了字符拷贝和消耗。
6、测试结果:(在我的笔记本上时行的,我的本本是T420I78G内存)100客户100,000(十万次)不间断的发送接收数据(发送和接收之间没有Sleep,就一个一循环,不断的发送与接收)耗时3004.6325秒完成总共10,000,000一千万次访问平均每分完成199,691.6次发送与接收平均每秒完成3,328.2次发送与接收整个运行过程中,内存消耗在开始两三分种后就保持稳定不再增涨。
看了一下对每个客户端的延迟最多不超过2秒。
2023/8/10 0:44:45 64KB C# IOCP TCP 完成端口
1
sds-dust-sensors-arduino-library:NovaFitnessSDS灰尘传感器系列(SDS011,SDS021)的库
2023/8/1 0:43:58 16KB arduino esp8266 nodemcu sensor
1
RockosDB、Chrome的V8引擎依赖库,在部署区块链时所需要的依赖的一些库。
下载即添加系统LD_LIBRARY_PATH库可直接使用
2023/7/30 2:24:23 51.98MB 区块链
1
Cascading+Style+Sheet+2.0+Handbook+Rainer+DHTML+Library.chm
2023/7/26 11:30:22 553KB css
1
AdafruitGFXLibraryThisisthecoregraphicslibraryforallourdisplays,providingacommonsetofgraphicsprimitives(points,lines,circles,etc.).Itneedstobepairedwithahardware-specificlibraryforeachdisplaydevicewecarry(tohandlethelower-levelfunctions).Adafruitinveststimeandresourcesprovidingthisopensourcecode,pleasesupportAdafruitandopen-sourcehardwarebypurchasingproductsfromAdafruit!WrittenbyLimorFried/LadyadaforAdafruitIndustries.BSDlicense,checklicense.txtformoreinformation.Alltextabovemustbeincludedinanyredistribution.RecentArduinoIDEreleasesincludetheLibraryManagerforeasyinstallation.Otherwise,todownload,clicktheDOWNLOADZIPbutton,uncompressandrenametheuncompressedfolderAdafruit_GFX.ConfirmthattheAdafruit_GFXfoldercontainsAdafruit_GFX.cppandAdafruit_GFX.h.PlacetheAdafruit_GFXlibraryfolderyour/Libraries/folder.YoumayneedtocreatetheLibrariessubfolderifitsyourfirstlibrary.RestarttheIDE.
2023/7/25 17:02:52 284KB oled
1
Mathcad_Cival_Engineering_Library.Mathcad_Cival_Engineering_Library.
2023/7/12 13:06:38 13.64MB Mathcad_Cival_Engineering_Library
1
1图书管理系统包括,借阅,归还,续借,读者类别管理,读者管理,图书类别管理,图书管理,管理员权限管理,排行榜管理2本项目为JAVAWEB开发,数据库为mysql数据库文件,直接放到data文件夹下即可名为db_library(内含详细部署说明书)3论文按照国外软件工程HigherNationalGroupAwardGradedUnitSpecification格式编写目录如下ProjectDocumentHistory 2Introduction 41.1UsingthisDocument 41.2PurposeofDocument 51.3Background 5Planning: 52.1TermsofReference 52.2ProjectScope 62.3ProjectName 6AnalysisoftheProject 73.1FactFinding 73.2Findings 8RequirementSpecification 194.1Introduction 194.2TheProgramModel 194.3FunctionalRequirements 204.4Non-FunctionalRequirements 204.5UserInterface 21ManagementofProject 215.1ProjectLifeCycle 215.2ProjectPlan 215.2.5ThePlan 23Developing: 24Analysis 246.1SelectionofSoftware 246.2IdentificationofObjects(themainpart) 256.3ClassInitial 276.4ClassResponsibilities 276.5ClassAttributesandMethods(partofmainClass) 286.6Limitations 306.7BehaviouralandStructuralModels 31Design 367.1UserInterfaceandOutputs 367.2DataDictionary 377.3DataStructureDesign 387.4TestStrategy 41Implementation 428.1.CodeSolution 428.2.TestSolution 55Evaluation 609.1.ProductEvaluation 60AppendixA 64Progressreport1 64AppendixB 65Progressreport2 65AppendixC 65HigherNationalGroupAwardGradedUnitSpecification 65
2023/7/4 22:49:50 4.45MB 图书馆 管理系统 j2ee
1
图书馆该项目是使用版本11.1.4生成的。
开发服务器为开发服务器运行ngserve。
导航到http://localhost:4200/。
如果您更改任何源文件,该应用程序将自动重新加载。
代码脚手架运行nggeneratecomponentcomponent-name生成一个新的组件。
您还可以使用nggeneratedirective|pipe|service|class|guard|interface|enum|module。
建造运行ngbuild来构建项目。
构建工件将存储在dist/目录中。
使用--prod标志进行生产构建。
运行单元测试运行ngtest以通过执行单元测试。
运行端到端测试运行nge2e通过执行端到端测试。
进一步的帮助要获得有关AngularCLI的更多帮助,请使用nghelp或查看“页面。
2023/6/29 13:15:16 157KB HTML
1
3DModellib,Library,AD9集成库等等
2023/6/12 11:51:42 740.95MB AltumDesigner 库文件
1
我使用的是ansj_seg-5.1.6.jar以及nlp-lang-1.7.7.jar下载文件以后直接将jar包复制在如下路径
2023/5/30 3:13:12 28.74MB ansj java
1
共 99 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡