最近有项目要做一个高功能网络服务器,决定下功夫搞定完成端口(IOCP),最终花了一个星期终于把它弄清楚了,并用C++写了一个版本,效率很不错。
但,从项目的总体需求来考虑,最终决定上.net平台,因此又花了一天一夜弄出了一个C#版,在这与大家分享。
一些心得体会: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秒。
2020/5/13 2:27:34 15KB IOCP 完成端口 源码
1
本项目只集成一个微信登录,相比MobShareSDK,不需要再去申请额外的账号,所以最终还是决定入坑原生来将其实现,查阅了官方文档和相关资料,最初总算是将它完成了,不过相比Mob,确实封装不彻底,流程较为繁琐,而且官方文档对新手可能不太友好,所以决定来记录下相关流程和心得,ok,letsgo!!!
2019/1/17 17:57:11 4.14MB 微信原生登录
1
课程设计报告+使用说明+源码摘要1一、引言21.1FTP工作原理21.2C/S原理3二、系统需求分析32.1功能需求32.3系统工作流程设计4三、系统详细设计53.1次要模块设计:53.2界面设计:7四、系统测试10五、系统使用说明115.1程序说明115.2操作流程11六、心得体会12
2015/4/2 19:20:44 440KB FTP
1
用一个CI算法处理实际的问题,要求题目,摘要(10分,中英文各5分)1.问题描述(背景)(5分)2.算法理论介绍(原理、思路、公式)(10分)3.处理问题步骤(实际做什么工作)(15分)4.仿真运行结果,截图、描述,代表什么含义(15分)[文字描述清晰,截图清楚]5.与其他算法的比较分析、改进措施;
(10分)6.结论:总结+展望;
(5分)7.心得:课程的学习心得体会;
(10分)8.参考文献。
近五年至少5篇。
(5分)9.相关代码。
(15分)中国矿业大学作业可参考可当模板遗传算法计算智能路径规划
2020/1/20 17:28:12 366KB 遗传算法 计算智能 路径规划
1
基于matlab的28355dsp代码自动生成生成,本人独有心得体会
2016/7/25 18:28:07 46.92MB MATLAB
1
本书将向读者讲述如何用VisualC++进行图形图像编程。
本书共分为图形篇、图像篇、综合提高篇。
图形篇以计算机绘图的基础知识为铺垫,介绍了各种图形元素的绘制方法,并结合实际代码实现了一个小型的绘图系统;
图像篇通过实例向读者介绍了不同格式图像的处理方法,并给出了一些特效处理的技巧;
综合提高篇综合应用了图形图像的知识,包括图形图像文件格式之间的转换、打印和打印预览、使用OpenGL和DirectX进行图形图像处理等内容。
  本书内容结合实例进行讨论,有助于读者尽快掌握实践的方法。
全书内容新颖、语言浅显、通俗易懂,适用于初、中级程序设计人员学习使用,也可同大中专院校师生阅读。
  循序渐进,通俗易懂。
丰富的代码实例和全面详实的代码注释。
充分利用面向对象的方法进行编程。
注重编程思路和技巧。
阐述了作者多年图形图像编程的实践心得。
小型绘图系统程序结构清晰,实现方法轻、灵活、新颖。
图像处理方式多样化。
2016/2/15 23:26:33 41.12MB 图形 图像编程
1
几年前运维迎来业务上的一次融合,从而倒逼后端的IT能力进行整合。
因为系统间的依赖关系,另外运行环境也有差别,导致系统迁移后无法使用,因而在不改变当前发布模式的情况下,需要重建依赖的运维平台体系并进行改造,需求由此而生并随着业务发展向外扩展。
本文将带大家去了解平台从过去到现在,新的设计方案如何融合到现有体系中?重新设计后的平台又带来了什么样的变化?在建设的过程中,团队又获得了什么样的心得和体验?融合时期保留了发布部署系统,业务调度,DB需求与执行平台和配置中心,这就带来两个问题:
2018/11/14 14:49:03 546KB 京东微信手Q运维体系概览
1
1.主电路的设计及原理说明;
2.触发电路设计,每个开关器件触发次序及相位分析;
3.保护电路的设计,过流保护,过电压保护原理分析;
4.各参数的计算(输出平均电压,输出平均电流,输出有功功率计算,输出波形分析);
5.使用举例;
6.心得小结。
2018/11/7 2:45:25 655KB 整流、交变直
1
本文件包含解析IP数据包的源程序及报告,是计算机网络课程设计的报告,里面有详细的源程序代码及报告格式及心得领会
2019/10/21 8:36:57 400KB 解析IP数据包
1
这篇文章主要是看图说话,所以如果你有什么反馈,心得或者建议,不妨留言,我会尽力在今天或者明天进行回复。
关于代码分享或者开源的问题,由于目前是帮公司做的,所以还没有时间和精力去抽取代码,不过会根据反馈,然后在近期内分享更多实现细节!前面一篇文章《最近架构随想》,我提到架构设计的一些构想,其实也是对之前项目经验的一些归纳及总结。
今天我们就以权限系统作为切入点,谈一谈怎么设计权限系统以及怎么做到系统具有以下特性:Organized:如果系统组织比较好,可以起到事半功倍的效果。
Encapsulated:对功能,结构,数据进行有效的封装,会使系统维护变得愈加容易。
Reusable:对常用功能以及组件进行
1
共 167 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡