最近有项目要做一个高性能网络服务器,去网络上搜到到的都是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
WCS功能及流程简要说明-入门
2023/8/7 6:53:06 526KB WCS功能及流程简要说明-入门
1
进入注册表修改以下内容。
windows10企业版本的位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parametersMajorVersion将10改为7(十进制)MinorVersion将0改为5(十进制)window10的其他版本有点不同,就是改本系统的版本信息,安装好后,再改回来。
2023/8/3 2:01:33 351KB IIS
1
unity可以使用的System.Drawing.dll,亲测可用。
用来处理图像。
2023/7/31 0:55:50 148KB unity  drawing
1
授权文件使用方法:1、打开文件找到base64_encode(base64_encode('*.baidu.com')),/2、将百度修改成自己的域名3、复制粘贴到system目录里请注意这个授权文件不是4946版本的license与license授权文件不同
2023/7/24 13:05:53 4KB 方维授权文件
1
oracle扩展system表的操作步骤
2023/7/21 15:58:31 396B oracle
1
火龙果软件工程技术中心  一、实现目的1、在Web中托管Workflow引擎实现工作流流转。
2、使用持久化的方式存放工作流实例状态。
二、基本原形报销流程(网上有很成熟的基于工作流的报销流程,我还在这里显摆,唉!)三、使用到的核心类WorkflowRuntime、ExternalDataExchangeService、WorkflowInstance、WorkflowPersistenceService分别在dotnet3.0的一下命名空间中:System.Workflow.Runtime、System.Workflow.Activities、System.Workflow.Runtime.Ho
2023/7/19 10:55:15 267KB 简单状态机Workflow基于Web应用
1
模拟风扇(满分50分)版本1:满分15分模拟实现电风扇,可以调3档速度(慢速、中速、快速);
开关按钮;
定时吹风;
描述风扇的扇叶大小、颜色等。
设计Fan类,属性包括:3个常量SLOW(1)、MEDIUM(2)、FAST(3)代表风扇的速度;
1个int属性speed指定速度,默认值为SLOW;
1个boolean属性on指定开关机,默认值false;
1个double属性radius指定风扇扇叶大小;
1个String属性color指定扇叶颜色,默认值为blue。
方法包括这些属性的访问器、构造函数、重写Object类的toString()和equals()方法等。
运行测试代码:publicstaticvoidmain(String[]args){Fan1fan1=newFan1();fan1.setSpeed(Fan1.FAST);fan1.setRadius(10);8fan1.setColor("yellow");fan1.setOn(true);System.out.println(fan1.toString());}版本2:满分15分修改版本1中Fan类,让其继承JPanel类,并且把color属性设置为Color类型,默认属性为red。
随机产生radius,取值范围为1-5;
随机产生颜色,取值范围为red、blue、yellow、green、orange;
根据color、radius属性值绘制风扇。
版本3:满分20分让版本2中的风扇转起来。
创建一个FanControl类包含以下内容:Start、Stop、Reverse按钮,用于开启、关闭、反转控制;
一个滚动条控制速度。
2023/7/13 12:39:49 17KB 风扇 java 三个版本
1
该资源对应Unity3DECS框架Entitas入门学习3文章的内容。
主要承接上一节的内容来实现点击右键创建角色、点击左键移动角色的功能。
这边会在IComponent中保存Unity场景中GameObject的引用,以便在各个System中使用,并使用Link方法可以在场景中的看到调试信息。
如果你第一次学习该内容,请根据第二节内容input相关的内容完成EmitSystem。
2023/7/1 7:31:34 4.57MB Entitas
1
androidvold模块,支持多分区挂载,支持ntfs、exfat格式挂载,压缩包中的tools目录,是一些工具,就是为了支持ntfs、exfat格式的挂载,需要把这些可执行文件拷贝是小机的system/bin/目录下。
2023/6/30 2:56:35 2.59MB vold
1
共 290 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡