盒子中的souledge大侠发布了新的Socket库,以下为原文:

我之前写过一个iocp的框架,放到googlecode上了。

由于当时的delphi版本尚无法跨平台,所以该框架只能运行在Windows下。

现在Delphi的跨平台编译器基本已经成熟了,主流的操作系统基本都已支持,这是一个很好的契机,于是催生了我新的通讯框架的诞生,这个新的通讯框架就是Delphi Cross Socket。

期间有很多朋友通过QQ或邮箱联系过我,希望我尽快发布新的框架源码,不过工作一直很忙,我也只能用闲暇时间整理,直到今天终于整理出了一份初稿,放到github上了。

希望能帮助到需要的人,也希望Delphi越来越好!

https://github.com/winddriver/Delphi-Cross-Socket

Delphi 跨平台 Socket 通讯库

作者: WiNDDRiVER(soulawing@gmail.com)

特性

针对不同平台使用不同的IO模型:

IOCP
Windows

KQUEUE
FreeBSD(MacOSX, iOS...)

EPOLL
Linux(Linux, Android...)

支持极高的并发

Windows
能跑10万以上的并发数, 需要修改注册表调整默认的最大端口数

Mac
做了初步测试, 测试环境为虚拟机中的 OSX 10.9.5, 即便修改了系统的句柄数限制, 最多也只能打开32000多个并发连接, 或许 OSX Server 版能支持更高的并发吧
同时支持IPv4、IPv6

零内存拷贝

已通过测试

Windows
OSX
iOS
Android
Linux

建议开发环境

要发挥跨平台的完整功能请使用Delphi 10.2 Tokyo及以上的版本
最低要求支持泛型和匿名函数的Delphi版本, 具体是从哪个版本开始支持泛型和匿名函数的我也不是太清楚

已知问题

iOS做了初步测试, 连接数超过80以后还有些问题, 不过通常iOS下的应用谁会去开好几十 连接呢?

Android初步测试, 并发到450之后就无法增加了, 可能受限于系统的文件句柄数设置.

Ubuntu桌面版下似乎有内存泄漏 但是追查不到到底是哪部分代码造成的, 甚至无法确定是delphi内置的rtl库还是我所写的代码引起的. 通过 LeakCheck 库能粗略看出引起内存泄漏的是一个 AnsiString 变量, 并不能定位到具体的代码. 但是我自己的代码里根本没有任何地方定义或者使用过类似的变量, 其它Linux发行版本尚未测试.

盒子地址

http://bbs.2ccc.com/topic.asp?topicid=533321

Delphi Socket Demo的更多相关文章

  1. [转] Delphi Socket Architecture

    Delphi Socket Architecture - Felix John COLIBRI. abstract : The architecture of the ScktComp socket  ...

  2. Delphi Socket通信及多线程编程总结

    http://cxhblog.blog.sohu.com/41930676.html 一.Socket通信: Delphi在ScktComp单元中对WinSock进行了封装,该单元提供了TAbstra ...

  3. 初涉Delphi Socket编程

    不是第一次接触socket编程了,但以前都是看别人的依葫芦画瓢,也不知道具体的原理. 新的项目,有了新的开始,同时也需要有新的认识. Delphi 中带有两套TCP Socket组件: Indy So ...

  4. CommMonitor8.0 串口过滤驱动 SDK DLL版本 C#/Delphi调用DEMO

    CommMonitor8.0 SDK DLL 版本,此版本是直接调用DLL. Delphi调用定义: constCommMOnitor8x = ‘CommMOnitor8x.dll’; typeTOn ...

  5. 【网络编程】——linux socket demo

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/socket ...

  6. Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件

    //**********************************************************************************//说明: 阻塞线程下为什么不触 ...

  7. C socket demo

    一.服务端-server.c #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> # ...

  8. Delphi socket() 函数的应用

    socket()系统调用,带有三个参数: 1.参数domain指明通信域,如PF_UNIX(unix域),PF_INET(IPv4), PF_INET6(IPv6)等 2.type指明通信类型,最常用 ...

  9. delphi socket 编程 使用多线程

    http://blog.csdn.net/lailai186/article/details/8788710?utm_source=tuicool TClientSocket和TServerSocke ...

随机推荐

  1. CxImage整理(叠加字符/图像合并)

    //CxImage叠加字符 void CCxImageTestDlg::OnBnClickedButton1() { CxImage imgJPG; // 定义一个CxImage对象 imgJPG.L ...

  2. java如何防止反编译

    综述(写在前面的废话) Java从诞生以来,其基因就是开放精神,也正因此,其可以得到广泛爱好者的支持和奉献,最终很快发展壮大,以至于有今天之风光!但随着java的应用领域越来越广,特别是一些功能要发布 ...

  3. Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理

    今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <di ...

  4. 前端开发面试题收集 JS

    前端开发面试题收集-JS篇 收集经典的前端开发面试题 setTimeout的时间定义为0有什么用? javascript引擎是单线程处理任务的,它把任务放在队列中,不会同步执行,必须在完成一个任务后才 ...

  5. json、map互转

    首先,json转map 方法一: Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 或 Gs ...

  6. 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

    1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...

  7. Kruskal-Wallis Test and Friedman test

  8. UCS2转UTF-8方法

    前两天工作时需要将UCS2编码转为UTF-8编码在网页显示.网上找了好久没有好方法,后来还是同事给了一个自己的函数,顺利解决问题.把函数贴在这里,愿帮助遇到同样问题的工友们~ /**      * U ...

  9. deferred initcalls与模块化

    deferred initcalls与模块化 有两个技术可以加快kernel的启动速度: 1.deferred initcalls 2.模块化 它们的思想类似,都是将非必要的模块初始化推迟到内核启动之 ...

  10. Mvc里删除Cooki

    /// <summary> /// 删除Cookie /// </summary> /// <param name="skuID">从购物车选择 ...