DIOCP3的重生

从开始写DIOCP到现在已经有一年多的时间了,最近两个月以来一直有个想法做个 30 * 24 稳定的企业服务端架构,让程序员专注于逻辑实现就好。虽然DIOCP到现在通讯层已经很稳定了,但是要做如果做这种架构,发现还有诸多不便。于是,有了重写DIOCP的想法。

关于开源服务器的选用:

前段时间大部分代码已经编写完成,于是需要给diocp3安个家,google显然不行了,老是被墙。然后准备选用http://sourceforge.net/,发现我的qq email老是收不到验证邮件。经过几番纠结选用了github。

目前diocp3的开源地址 https://github.com/ymofen/diocp3

关于开源:

自从DIOCP开源以来,收益最大的应该是本人,结交了很多好的好友,得到他们很多帮助和支持。diocp也得以稳定。有些朋友得知我写diocp3,劝我做商业版。经过一翻思考后,决定还是开源diocp3,并且为了可以使diocp3使用在商业软件上,在选用开源协议方面选用了BSD。下面是摘自百度的一段话。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

关于diocp3 功能:

  • iocp-engine:

iocp引擎,也是diocp的核心部分, 包含(iocpEngine.pas,iocpLocker.pas,iocpProtocol.pas,iocpStringRes.pas)4个文件,实现了基本的iocp模型。也是其他部分的核心部分。

  • iocp-socket:

iocp模型在socket方面的应用。iocpTcpServer,是高并发的服务端组件,iocpTcpClient,是客户端的Socket,与ICS中的TWSocket类似,都是基于iocp引擎的。

  • iocp-socket-Coder:

包含(uBuffer.pas,uIocpCoder.pas,FileLogger.pas,uIOCPCentre.pas,uIOCPFileLogger.pas,iocpCoderTcpClient.pas)文件,强化了客户端和服务端组件,融合和编码和解码器,客户端和服务端,只需要投递对象就好,不用去在业务中处理繁琐的粘包问题,兼容DIOCP1的功能类。

  • iocp-task:

基于iocp引擎的任务投递+异步回调。iocpLogger,基于iocp-task的日志记录,可以在线程中,把信息投递到主线程,记录日志到memo。

征询大家的已经把所有的代码存放在source目录,便于大家引用。

关于diocp3的DEMO

存放在samples目录下面

ECHO:

普通的echo功能实现服务器测试,ECHO\BIN\下面存放了 dbiocp的测试客户端和qsl的EchoClient.exe写的很好了,我就没有重复写了。目前进行了并发15K的测试,运行了2天没有问题。

iocpTask:

投递任务的简单DEMO

socket-Coder:

消息推送的实现,服务器主动推送消息给客户端的一个简单DEMO

* 由于各个版本的.dproj文件不兼容,DEMO中不提交除了dpr之外的其他文件,请大家在编译DEMO的时候设置下工程search paths或者把diocp3\source加入的library path中,就可以编译diocp3的DEMO了

关于Delphi环境变量的设置

工程目录设定

$(DIOCP3_HOME)\Source;

目前经过了几个Beta版本的测试, 先发布DIOCP3的第一个版本,如果有问题欢迎到群内交流

DIOCP(Delphi□iocp)交流群:320641073

最后感谢:

ryan 哥 给予的iocpRequest思想。感谢qsl提出的很多建议,感谢qdac-swish的很多代码和思想(iocp-task,源于qworkers), 感谢音儿的DEMO的测试。

DIOCP开源项目-DIOCP3的重生和稳定版本发布的更多相关文章

  1. DIOCP开源项目-DIOCP3的LoadRunner11测试报告

    昨天有个多年的群友(B3.Locet)用LoadRunner11对DIOCP3做压力测试,说测试的时候出现了大量的10053,10054的报告.昨天晚上下载了个LoadRunner11, 今天捣鼓了下 ...

  2. DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>

    首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉. 以下是测试的结果,从服务器下载传输了一个3G左右的 ...

  3. DIOCP开源项目-DIOCP3重写笔记-1

    这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下, 关于排队投递的流程 这 ...

  4. DIOCP开源项目-DIOCP3直接发送对象,帮你处理粘包问题

    该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题. 上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该 ...

  5. DIOCP开源项目-DIOCP3的ECHO测试<贴图>

    星期六开了测试台测试机子.星期天休息,今天早上来接两个图 开了2个客户端,一个qsl的echo client,一个是楠楠的dbiocp回调客户端.建立13240个连接 今天来后,机子很卡,后来发现是楠 ...

  6. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

    [概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定.这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天 ...

  7. 微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布!!!

    微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布 Weixin-App-Shop 是捷微团队开发的微信小程序商城开源项目,涵盖了微信商城的全部功能,能够快速发布简单易用的小 ...

  8. .NET ORM 开源项目 FreeSql 1.0 正式版发布

    一.简介 FreeSql 是 .NET 平台下的对象关系映射技术(O/RM),支持 .NetCore 2.1+ 或 .NetFramework 4.0+ 或 Xamarin. 从 0.0.1 发布,历 ...

  9. DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端

    最近头脑里面一直在想怎么样让能让大家基于DIOCP上写出稳定的服务端程序.很多朋友问我,你DIOCP稳定吗,我可以用他来做三层服务器吗? 当时我是这样回答的,我只能保证DIOCP底层通信的稳定. 说实 ...

随机推荐

  1. Git/Github的使用以及与Eclipse的整合

    Git简介       Git是一个免费的.分布式的版本控制工具,或是一个强调了速度快的源代码管理工具.每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖于网络 ...

  2. tf.gfile

    一.功能和目的 tf.gfile模块定义在tensorflow/python/platform/gfile.py,但其源代码实现主要位于tensorflow/tensorflow/python/lib ...

  3. 【经验总结】 fisheye 3.1.5 安装、破解全过程 图文教程(2.0以上版本均可成功!)

    声明:此破解仅为个人娱乐,如果你有钱,请支持正版! 重要说明,只要把fisheye先关掉即可,然后执行下面的破解步骤,一样可以破解!本人已测试通过. 一.安装.破解fisheye最新版3.1.5 所需 ...

  4. Ubuntu中root用户和user用户的相互切换[转载自93度的饼干]

    Ubuntu中root用户和user用户的相互切换 Ubuntu是最近很流行的一款Linux系统,因为Ubuntu默认是不启动root用户,现在介绍如何进入root的方法. (1)从user用户切换到 ...

  5. oracle收购Mysql后,Mysql的安装配置方法

    自从Oracle收购MySQL后,略微发生了一些小小的变化,原来mysql安装完成后默认是没有密码的,但是新版的mysql安装完成后oracle提供了一个free password放着/root/.m ...

  6. 超酷的 Vim 搜索技巧

    尽管目前我们已经涉及 Vim 的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足.承接我们的 Vim 教程系列,本文我们将讨论 Vim 提供的多种搜索技术. 不过在此之前,请注 ...

  7. js跨域问题解释 使用jsonp或jQuery的解决方案

    js跨域及解决方案 1.什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题. 跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说, ...

  8. ROS学习(十)—— 使用rosed编辑ROS中的文件

    一.rosed 1.作用: 直接编辑一个文件而不需要打开完整路径名 2.语法: rosed [package_name] [filename] 3.如果不知道编译哪个文件名,可以使用tab进行查询 r ...

  9. TensorFlow Google大会总结

    一.概述 介绍TPU,需要使用XLA编译,否则没有做内部优化,无法达到加速的效果: TPU相关的性能分析器: 二.新版本的输入库 之前TensorFlow的输入方式: feed_dict: 太过于低效 ...

  10. 关于解锁美版Play市场

    关于解锁美版Play市场(本帖已经突破了G+的500评论上限,如有问题请转载留言) 我对这个问题思考的很深刻也思考了很久,作为一个深度google脑残粉怎么能用不完整的Play Store呢?那人生岂 ...