1,IOCP是什么?

答:IOCP是windows下的服务器技术,并不是所有windows都能使用IOCP,只能在支持IOCP的windows操作系统上使用。

2,DIOCP是什么?

答:DIOCP是Delphi实现的IOCP服务器。

3,DIOCP可以跨平台吗?

答:不可以,只能在支持IOCP的windows下使用,目前还没有可以跨平台使用的服务器技术;在Linux下的服务器技术是Epoll。

4,我可以用不同语言开发的客户端同DIOCP连接通讯吗?

答:完全可以,DIOCP建立socket,监听所有连接过来的socket,客户端只要能够用socket同DIOCP连接,就可以使用。

5,DIOCP对多颗CPU优化了吗?

答:是的,diocp的工作线程是根据cpu核心数进行创建的,在开启服务时为工作线程,优先使用cpu的核。

6,DIOCP像Indy服务器那样实现了各类协议的服务器吗?比如HTTP、FTP等?

答:没有,DIOCP仅仅实现了最底层的通讯服务,并没有像Indy服务器那样实现了HTTP、FTP等。这些HTTP、FTP是通讯协议,如果需要,可以遵照这些协议实现它们。

7,DIOCP服务器有心跳检测功能吗?

答:DIOCP有,但是DIOCP3默认是关闭状态,也就是说不对客户端做心跳包检测,为什么这样做,因为客户端可能是不同语言开发的,很可能有的客户端对服务器主动心跳检测不回应,如果DIOCP服务器主动心跳检测,那么可能会画蛇添足了,所以DIOCP把心跳检测留给用户自己实现了。关于DIOCP心跳,作者写了一篇文章:http://www.diocp.org/?p=189

8,如果更好实现DIOCP的心跳检测?

答:最好是客户端主动发送心跳包给服务器,同时服务器定时对每个socket做连接超时检测。

A,客户端主动发送心跳包给服务器:客户端定时(不要超过服务器端允许的最大等待时间)给服务器发送心跳包,服务器端接收到心跳包时候,更新当前socekt的心跳包                检测时间,便于服务器端进行连接超时检测。

B,服务器定时对每个socket做连接超时检测:服务器定时对每个连接socekt的心跳包时间进行判断,判断最后检测到心跳包时间是否超过了允许的最大时间,如果超过,则             主动端口这个socket。

9,DIOCP不能满足我需求,我应该怎么扩展它呢?

答:当DIOCP不能满足需求时候,我们可以采用继承已有类的方式扩展,这种方式目前我认为是比较好的方式,如果DIOCP保持已经发布功能稳定的前提下,不会影响到            DIOCP的升级。DIOCP服务器中两个类和客户关系最密切,扩展时候应该首先关注这两个类:TIocpTcpServer和TIocpClientContext。

TIocpTcpServer:是DIOCP实现的IOCP服务器的管理类,它负责IOCP的创建和服务等具体工作,我们要使用DIOCP,第一个要使用的类就是它。如果想扩展DIOCP,我们应该认真看一下这个类,是否需要扩展它。

TIocpClientContext,对客户端socekt封装的类,实现了很多功能。如果我们想扩展DIOCP,很可能需要扩展这个类,如果真的扩展这个类,那么在DIOCP服务器创建时候,一定要注意使用registerContextClass去注册这个类,参数就是我们扩展了的TIocpClientContext类,这样在TIocpTcpServer接收到客户端之后,加入到管理列表中的类都是我们扩展的类了。这样做之后,我们在DIOCP服务器里面编写代码时候,是否可以啊?肯定可以的,DIOCP很多参数都是使用TIocpClientContext,实际上这是父类,我们编写的类是子类,允许向上转型,我们无需担心不能使用自己扩展的类,放心扩展使用吧!

10,我的业务逻辑代码应该在哪里实现?

答:我们看DIOCP的ECHO服务器的例子,在“OnRecvBuffer”里面接收客户端数据,我们要知道DIOCP是阻塞式socekt,这意味着,如果当前这个socekt的任务没有处理完毕,客户端将一直等待下去,这也会占用一个服务器端线程,降低处理速度。如果是非常简单的任务,可以直接在这里处理,如果复杂业务,那么我觉得不应该在这里处理了,目前DIOCP提供了IocpTask,我们应该使用这个技术来对逻辑业务处理。DIOCP作者对IocpTask做了介绍:http://www.diocp.org/?p=22

11,DIOCP例子都是什么内容?

答:DIOCP作者对Demo做了详细描述:http://www.diocp.org/?p=202

DIOCP (一) DIOCP常见问题。的更多相关文章

  1. VS2013使用rtklib中需要注意的一些问题(编译)

    最近因为项目需要需要对rtcm数据进行解码,rtklib提供了很多底层的函数,准备直接输出标准DLL的方式供C#调用.下面把项目中引用rtklib源码需要注意的地方记录下. 1. 首先在vs2013中 ...

  2. YxdIocp包含有支持大并发的TCP服务组件、HTTP服务组件、UDP服务组件、WebSocket服务组件

    Delphi Windows IOCP 通讯模型封装,基于DIOCP.YxdIocp包含有支持大并发的TCP服务组件.HTTP服务组件.UDP服务组件.WebSocket服务组件,和TCP.UDP等基 ...

  3. DIOCP之DEMO-Echo卡死问题分析

    最近很多新朋友在调试echo这个例程时发现,总是卡死客户端或服务器端,这是因为客户端的接收数据用的memo没有处理接受到的行数,导致超过最大行数,而卡死界面,只需要如下操作就可以解决: 引用弦子的:虽 ...

  4. DIOCP单元文件应用场景

    diocp.coder.tcpServer是用来做文件传输的 diocp.tcp.server这个是用来做通讯的

  5. DIOCP之开发流程图之Client

    本次分析开发流程图采用的是DIOCP群里的群友[彩蛋]所给的DEMO,依然是win7的画图作品. 本人分析认为:学习网络开发不同本地开发,首先你应该知道完整的开发流程即网络程序运行的先后顺序,有个整体 ...

  6. DIOCP 运作核心探密

    来自网友天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出了不少.我最近也在学习DIOCP,打算将它用于自己的服务端,今天让我们来一起探密它(DIOCP)的运作核心 ...

  7. DIOCP之注册编码解码器与ClientContext

    FTcpServer.registerCoderClass(TIOCPStreamDecoder, TIOCPStreamEncoder);//注册编码器与解码器 FTcpServer.registe ...

  8. DIOCP之DEMO-登陆验证设计(二)

    ECHOServer代码(不考虑粘包的处理): unit ufrmMain; interface uses Windows, Messages, SysUtils, Variants, Classes ...

  9. DIOCP网络通讯流程

    DIOCP 运作核心探密   原文连接: http://blog.qdac.cc/?p=2362 原作者: BB 天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出 ...

随机推荐

  1. Windows安装Mysql5.7.22

    1.下载Mysql,5.7版本,将zip包解压到某个安装目录下面,最好不要放C盘,选择一个容量大的磁盘.下载地址:https://dev.mysql.com/downloads/mysql/ 2.进入 ...

  2. 转载--js对象无法当成参数传递

    今天我碰到了这个问题一头雾水,明明记得对象是可以传参的啊.我使用了一款基于bootstrap的表格插件DataTables,想把行信息直接传给操作函数,方便编辑(此行信息是一个对象,按道理可以的啊), ...

  3. web前端整套面试题(一)--js相关

    一.单选 1.以下哪条语句会产生运行:(A) A.var obj = ( ); B.var obj = [ ]; C.var obj = { }; D.var obj = / /; B代表数组,C代表 ...

  4. solr自动提示 - jquery ui autocomplete

    需求: 搜索框中 输入部分关键词之后,有下拉联想提示.选中提示,使用鼠标或者使用enter键,则触发搜索功能.没有选择搜索提示,使用部分输入关键词作为搜索,直接使用enter键也能触发搜索功能.整个过 ...

  5. Boost智能指针使用总结

    内存管理是一个比较繁琐的问题,C++中有两个实现方案: 垃圾回收机制和智能指针.垃圾回收机制因为性能等原因不被C++的大佬们推崇, 而智能指针被认为是解决C++内存问题的最优方案. 1. 智能指针定义 ...

  6. [C++] the pointer array & the array's pointer

    int *p[4]------p是一个指针数组,每一个指向一个int型的int (*q)[4]---------q是一个指针,指向int[4]的数组 --> type: int(*)[4] vo ...

  7. oracle sql 数结构表id降序

    UPDATE BAS_ORGANIZATION_TYPE T1SET T1.PARENTID=(select rn from (SELECT id,rownum rn FROM BAS_ORGANIZ ...

  8. C#序列化效率对比

    原文出处:https://www.cnblogs.com/landeanfen/p/4627383.html 从使用序列化到现在,用到的无非下面几种方式:(1)JavaScriptSerializer ...

  9. Tag recommendaion... 论文中的小例子,使用HOSVD算法推荐

    本文内容来自于论文:Tag recommendations based on tensor dimensioanlity reduction 在社会标签系统中,存在三元关系,用户-物品-标签.这些数据 ...

  10. [GO]用go语言实现区块链工作原理

    基本原理这里就不写了,只写一个简单demo的实现 首先得有一个区块用来存储区块头和区块体 type Block struct { Version int64 PreBlockHash []byte H ...