暂无个人介绍
TIOCPConsole是继承至TIocpTcpServer,做了管理和调用编码和解码器器的功能。可以通过向他注册编码和解码器可以忽略粘包的问题。 这样如果TIOCPConsole客户端必须按照一定的编码器和解码器的协议发送数据和接受数据, diocpCoders中已经有了几种编码和解码器, 比较常用的TDIOCPStreamCoder 他的格式是Pack_Flag + streamLen + Stream数据 如果不是这种数据格式会认为是客户端在攻击服务器会被T掉。
什么是粘包: 第一次发送 12345, 第二次发送abcde, 底层socket可能会一次性进行发送12345abcde,或者对方可能一次性进行了接收,那接收的时候,你可能想分两次接收才对,第一次接受到12345, 第二次想接收abcde,但是事与愿违,一次就接收完了,这就是粘包的问题。
DIOCP3支持两种方式接收数据, 第一种是原始的流数据, 最通用的一种方式,客户端发啥,这边就收到啥。需要自己处理粘包问题。 可以在TCilentContext或者TIocpTcpServer的OnRecvBuffer中处理, 如果Errcode = 0可以进行收到数据的处理 下面这两...
plugMap实现了对象的存储,使用setObject,和getObject来对对象进行存储 内部其实是一个列表,而且他会在释放的时候会情况尝试释放所有的对象,所以如果你共享的对象提前进行了释放,会导致在关闭程序释放的时候出现操作无效的指针错误。
昨天有个多年的群友(B3.Locet)用LoadRunner11对DIOCP3做压力测试,说测试的时候出现了大量的10053,10054的报告。昨天晚上下载了个LoadRunner11, 今天捣鼓了下。
首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉。 以下是测试的结果,从服务器下载传输了一个3G左右的文件(Win7.iso)。
该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题。 上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该对象为字符串数据)。
星期六开了测试台测试机子。星期天休息,今天早上来接两个图 开了2个客户端,一个qsl的echo client,一个是楠楠的dbiocp回调客户端。建立13240个连接 今天来后,机子很卡,后来发现是楠楠的dbiocp导致的。
这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下, 关于排队投递的流程 这是投递一个TIocpSendRequest的流程,投递开始,投递一块数据,最大50K,如果超过50K则分批进行投递。
DIOCP 开源地址 讨论群(QQ): 320641073 DIOCP-v5开源项目地址https://github.com/ymofen/diocp-v5 MyBean开源地址 轻量级配置开源框架 讨论群(QQ): 205486036 https://git.
PDF预览 下载地址 http://files.cnblogs.com/DKSoft/CodingInDelphi.pdf 1.1. 解耦(Decoupling) All through this book, I’ll talk a lot about decoupling your code and why that is really good. But a definition here is probably a good idea. 贯穿本书,我将讨论了许多有关解耦代码和这样做会带有什么样的好处的话题。
[概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定。这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效。
3个逻辑处理进程 + DIOCP通信服务器(5K连接) + 5个客户端 运行半个小时,无丢包,数据完整 群内无毒公主 10K连接 , 逻辑处理进程未知 50分钟,所有客户端关闭
最近头脑里面一直在想怎么样让能让大家基于DIOCP上写出稳定的服务端程序。很多朋友问我,你DIOCP稳定吗,我可以用他来做三层服务器吗? 当时我是这样回答的,我只能保证DIOCP底层通信的稳定。
[概述] 抱歉由于上次开源比较匆忙,没有来的及做一个DEMO,里面也有些垃圾的文件没有及时清理。DEMO其实昨天晚上已经调通。相关说明文档今天晚上才说明好,欢迎大家继续关注和交流,和大家一起分享我10多年的管理软件框架开发经验,后续会完善更多相应的有用的插件,供大家直接使用。
[概述] 自从mBean框架出生后,受到很多朋友的关注,在公司的外包项目中得到了不错的应用。由于mBean是公司的项目,不便开源,于是这几天利用晚上的时间和周末的时间重写了底层beanMananger.dll所有代码。
最近想在DIOCP中加入任务调度线程,DIOCP的工作线程作为生产者(producer)将接受到的数据对象,投递到任务调度线程中,然后统一进行分配。然而这一切都需要一个队列, 这几天都在关注无锁队列。 [队列] 首先是一个队列,简单的队列就是,生产者把数据压入队列(push), 消费者通过队列Pop出数据进行处理。
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x + y = 9- 2^w = –7 sum – x == y? -7 – 4 = – 11 属于第三种情况 负溢出 sum – x = –7 - 4= –11 + 2^w = 5 = y? 明显是等于的 同样 sum- y = x ? -7 – 5 = –12 + 2^w = 4 = x? 所以溢出的情况下面根本判断不到。
如果没有需要下载一个vmTools,我是下载的 然后加载到光驱,然后在ubuntu下面可以找到光驱 解压里面的文件, 我解压到 Documents下面 然后ctrl + alt + t进入控制台 cd home cd Documents cd vmware-tools-distrib .
2013年9月份在苏宁上 买了个HP450,配置应该算还勉强,i5, 4G, 照理说一般LOL,DOTA,应该还可以。但是经常在打完一盘后,切出来,卡的要命,一直没有解决,昨天晚上虚拟机切出来,更是,卡的我要重启电脑,后来经过【妮子】的提醒在HP上找了个Intel极速存储的驱动,貌似好多了,LOL了两把赶紧还不错,虚拟机切出后反应不错。
对象池一般在服务端使用,所以稳定性是第一的。 欢迎提意见 unit uMyObjectPool; interface uses SyncObjs, Classes, Windows, SysUtils; type TObjectBlock = record ...
DIOCP自开源以来,得到了很多朋友的测试,并进行了诸多的改进,现在已经运用到了一些具体的项目当中。 DIOCP底层运行稳定。 昨天做了个ECHO测试,这个连接数并没有达到上限。 11K 连接,1个半小时,没有断线,被T 服务端内存占用稳定 cpu占用也不高
[mBean]的萌芽 最近公司要求把我们公司的任务可以外包,问我有没有好的方案。 如果要其他程序员的人来做我们内部的框架会导致了,内部的框架需要公布很多单元和逻辑,思路。其次要把我们的思路和规则强加给其他的程序员。
环境: sqlserver 2008 事务(进程 ID (n))与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行 死锁原理: 如两个任务 任务1,已经锁定R1,再进行请求R2 任务2,已经锁定R2,再进行请求R1 导致两个任务都进入了阻塞。
环境: MSSQL 2008, 都在没有使用缓存的情况下面执行 表中有8W 条记录 分类1有134条记录 分别测试了3个语句 -- A select 字段1 from 表1 WHERE Ftype='分类1' ORDER BY 字段1 -- B select ...
clean compile //推荐使用UTF-8编译 org.apache.maven.plugins maven-compiler-plugin 3.
Delphi 3开始有了TWebBrowser构件,不过那时是以ActiveX控件的形式出现的,而且需要自己引入,在其后的4.0和5.0中,它就在封装好shdocvw.dll之后作为Internet构件组之一出现在构件面板上了。
1.获得网页中变量值 htm中 var currID=123 程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.
直切主题 现有一张表 table : ChenJi ID, DanWeiID, Name, ChenJi 表中记录 ID DanWeiID Name ChenJi --- ----------- --------- --------- 1 1 ...
印象中网络程序都是sendBuffer和recvBuffer来发送数据和接收数据,本次Demo演示如何定义定义一个自己的对象,然后我们按照OO的思想直接进行对象的发送和接收,先上个流程图。 下面是客户端发送和接收的测试代码。
经过昨天晚上一折腾把做了一个DIOCP直接传递TADOQuery的Demo,在google上找了一系列的资料。 这样服务端可以直接将TADOQuery查询出来的数据直接转换成TStream自己进行传递,到客户端用一个TADOQuery对象还原流就可以了。
很久没有写DIOCP的Demo了,主要公司的事情太繁琐,工作之余都不想动了,之前承若的群里面朋友们的DEMO,昨天晚上恶补了一下,把对数据库连接池的操作加入到了Demo中,大家可以通过SVN下载到最新的代码和Demo。
SET NOCOUNT ON DECLARE @db VARCHAR(20) SET @db=db_name() DBCC UPDATEUSAGE(@db) WITH NO_INFOMSGS GO CREATE TABLE #tblSpace ( 数据表名称 varchar(2...
今天群里有个朋友说他们医院项目采用直连数据库,高峰时期sqlserver的连接数达到7000多,于是我准备做个用diocp做个demo,服务端用连接池。白天的时候我在想,并发如果7000个。如果用diocp做三层服务器,连接池应该在100个左右。
>>>>>>DIOCP讨论群:320641073 >>>>>>SVN源码和DEMO下载:https://code.google.com/p/diocp/ 网络带宽有限,对数据进行压缩再进行传送可以有效的利用带宽和提高传输的效率。
经过两天时间的开源,感谢网友提出一些修改意见,特别是在XE中,做了一部分优化。 可以在SVN中下载到最新的代码 https://code.google.com/p/diocp/ 今天做了一个操作数据库的演示 操作数据库比较简单,分两部分功能,第一部分打开SQL procedure TfrmMain.
经过对一段时间对IOCP的学习和研究。对IOCP的流程有了一定的了解。 后面对一段时间的IOCP优化和实际项目的使用,在DIOCP中加入了日志文件记录功能,利用api编写了一个客户端通信类,等解决了很多bug,并已使用在公司的项目中,现运行稳定。
Delphi-IOCP 共同学习研究群号 320641073 iocp的学习和交流。
declare cnt number; begin ---查询要创建的表是否存在 select count(1) into cnt from cols where table_name = upper('sys_CustomReport') ...
DECLARE @DateStart DATETIME, @DateEnd DATETIME, @Date DATETIME SELECT @Date = GETDATE() --一个月的开始 SELECT @...
procedure TFormMain.btn1Click(Sender: TObject); begin //加载dll TReportConsoleLibWrapper.checkInitialize; try //创建一个接口,由DLL创建 with TReportConsoleLibWrapper.
经过一段时间的研究和学习,对IOCP的原理和流程都有了一定的了解,测试的Demo结果显示在局域网内轻轻松松处理5000个左右的连接,还是比较稳定的。运行Echo测试几个小时后。服务端内存稳定在60M左右。
有点意外,没想到我51上面的简历,会被猎头看上。 上了30岁,很多激情没有了。。。 也确实向往一份稳定安逸的工作。
刚刚的测试,服务端上图 开了5个客户端进行测试。 内存视乎不是很多。客户端的发过来的数据包大小在4096+88字节左右。 测试Echo测试线程 procedure TfrmMain.
现在IOCP的功能还剩下服务端数据的返回。 还是采用netty的方式。netty返回数据的调用是这样的contenxt.write( obj);这样将obj对象发送给客户端。 1.将回传的对象进行编码成buffer 2.
今天完成了第三点,初步按照netty 的做法制作了Decoder,由于我现在用的2007还没有泛型,所有我使用的返回TObject做法 我先介绍下netty的处理数据的流程 1.IOCP接收的数据。
规划下将要出炉的IOCP。 1.将接收IO数据改成内存池。 2.扩展lpCompletionKey: DWORD参数.扩展套接字对象。 3.借鉴java netty思路,使用decode –> handler的思路来处理客户端数据。
现在IOCP可以接收到数据了。 >>>>>>>>>其实IOCP的队列是先进先出的,经过测试,看来是我记错了!!!! >>>>2013年4月20日 16:22:46 >>>>>引用 TCP数据粘包的产生原因在于TCP是一种流协议。
今天把前几天研究的代码都整理了下。 我觉得刚开始学习IOCP,看简单的例子更容易入门。 先截取运行图 下面是这个是IOCP简单测试 点击运行服务,开启IOCP工作线程和监听过程。 创建客户端连接是使用的idtcpClient.
接第一次代码继续分析 uses JwaWinsock2, Windows, SysUtils; const DATA_BUFSIZE = 1024; IO_TYPE_Accept = 1; IO_TYPE_Recv = 2; type //...