'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)

关键词:

IOKING IOCP TCP  Transmission Server Engine Lock Free Interlocked

云猴完成端口TCP通讯服务器引擎 无锁 原子锁(函数)

‘IOKING‘ TCP Transmission Server Engine (‘云猴‘?TCP通讯服务器引擎)(预告版)

下载连接:

http://download.csdn.net/detail/guestcode/7474171

一、       技术要点

I O C P:基于Windows的IOCP模型

句柄重用:避免重复创建socket句柄

内 存 池:专有的IO内存管理

无    锁:消息队列、连接池和内存池的多线程竞争不仅仅实现了0内核态,还是连原子函数均未使用的真正得的“无锁”

限    速:限制客户端发送最大流量(避免恶意流量攻击),限制客户端接收最小流量(客户端接收数据连续低于此速率3秒钟,将会被断开,避免恶意连接)

X86&X64:完全兼容两个系统平台

IPv4&IPv6:完全兼容两种IP格式

日    志:具有更完善的日志信息,便于服务器的故障分析,每秒采用数据存于Logs目录

引    擎:内置了生产消费者线程(包含能用于数据库操作和磁盘操作的线程)和生产消费队列,设置队列的生产消费关系可以架构复杂的应用服务器框架,不需要考虑线程的创建和队列的同步问题,仅需定义消息格式然后在相应的消费者线程里处理该消息即可。

二、       运行界面

1、 点击Start

2、 设置监听IP和端口点击Listen

三、       主要配置参数

iBuf:输入(接收)缓冲

oBuf:输出(发送)缓冲

IsIPv6:Socket句柄初始化默认是否是IPv6,如果监听地址是IPv6,最好打钩,可以避免句柄重用时的初始化

Max Input:最大输入速率(KB/S),限制发送客户端速率,避免恶意攻击,0为不限制

Min Output:最小输出速率(KB/S),客户端接收数据连续低于此速率3秒钟,将会被断开,避免恶意连接,0为不限制

四、       测试表现

用例1:

客户端:GSocket客户端,1000个连接,回射模式:客户端收到上一个回射数据包后再发送下一个数据包

GSocket Server:CPU平均占用25%

IOKING Server:CPU平均占用22%+

数据包的往返时间一致

用例2:

客户端:GSocket客户端,1000个连接,密集数据模式:客户端投递完一个数据包后立即再投递下一个数据包

GSocket Server:CPU平均占用26%+

IOKING Server:CPU平均占用15%-

GSocket Server:数据包往返时间超过2秒

IOKING Server:数据包往返小于600毫秒

结果:用例1情况下,基本没有多大差别;但在用例3情况下,数据越密集,与GSOCKET相比,IOKING具有更佳的表现。达到了设计预期。

五、       开发过程

IOKING是GSOCKET1.0发布以后就开始着手做的,原来只是考虑通讯引擎功能,前后历经了5年,为最求真正的“无锁”很多技术问题需要慢慢的测试和求证,前后经过无数次的推到重建,期间研究了很多锁和队列,经过充分分析IO事件的紧要等级和合理调配线程的角色,才得以“无锁”的实现(所谓无锁是指程序员能控制的线程竞争区域实现的无锁操作,包括不使用原子函数(指令)在内实现的同步机制)。

在开发后期,加入了生产消费者线程和生产消费队列,这是个人每次做服务器程序都很讨厌的重复创建服务器程序框架代码,有了这个功能即减少了重复工作也避免了新代码的Bug,还降低了服务器程序架构的所需的技术水平要求。

因此整个组件命名为:TCP通讯服务器引擎。由网络IO引擎和消息引擎(生产消费)这两大核心模块组成。

原定中文名为:泛虎(IO为泛,king为虎),经过多番思量才在2010年最终定为:云猴(IO为云,King为猴)。不想它能有多大作为,仅为体现一个程序员认真的做事态度和完美的执着最求。

六、       发布说明

1、 消息引擎尚未完全测试,暂时发布EchoServer

2、 测试可能因为个人硬件配置和软件配置等因素影响

3、 尚未做好保护措施,Demo暂不包含组件LIB文件。

4、 附带的exe具有完全功能可做压力测试用以参考。使用前请对exe进行安全监测,本人无法确定自己的机器是否具有“危险”亦无法确定exe是否已经感染了“危险”,对此本人不担负任何责任。

5、 待所有功能都测试完毕后再连一些测试数据和截图一起发布,因此此次发布定为预告版。

'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)

时间: 2024-10-06 12:20:39

'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯服务器引擎)(预告版)的相关文章

'IOKING' TCP Transmission Server Engine ('云猴'©TCP通讯server引擎)(预告版)

关键词: IOKING IOCP TCP  Transmission Server Engine Lock Free Interlocked 云猴完毕portTCP通讯server引擎 无锁 原子锁(函数) 'IOKING' TCP Transmission Server Engine ('云猴'?TCP通讯server引擎)(预告版) 下载连接: http://download.csdn.net/detail/guestcode/7474171 补充: 无锁消息引擎已经完毕: http://b

关于TOE(TCP/IP Offload Engine)

前言 昨天在电脑上抓取的报文,想进行回话,但是发现全部被设备丢弃了,没有debug信息,查看了抓包文件,原来是IP头和TCP.UDP头的检验和全部为0,也就是TOE(TCP/IP Offload Engine)导致的. TOE(TCP/IP Offload Engine) 传统的TCP/IP处理网络数据传输过程中,要占用大量的主机CPU资源,为了减轻CPU的压力,一种叫TOE(TCP/IP offload engine,TCP/IP卸载引擎)的技术应运而生.TOE技术对TCP/IP协议栈进行扩展

Method of offloading iSCSI TCP/IP processing from a host processing unit, and related iSCSI TCP/IP offload engine

A method of offloading, from a host data processing unit (205), iSCSI TCP/IP processing of data streams coming through at least one TCP/IP connection (3071?,307?2?,307?3), and a related iSCSI TCP/IP Offload Engine (TOE). The method including: providi

TCP并发server,每个客户一个子进程

今天笔者带来的是server型号第一,这是最经常使用的模型的最基本的一个–TCP并发server,每个客户一个子进程. 首先简单介绍:TCP并发server,每个客户一个子进程,并发server调用fork派生一个子进程来处理每一个子进程,使得server能够同一时候为多个客户服务,每一个进程一个客户. 客户数目的唯一限制是操作系统对以其名义执行server的用户ID能够同一时候拥有多少子进程的限制. 详细到我们的需求,我们的client发送某个指令,服务端接收.假设符合服务端的要求.就将当时的

sql server连接字符串与tcp/ip开启

连接字符串1:Data Source=localhost,1433;User ID=sa;Password=123;Initial Catalog=test;Min Pool Size=1;Max Pool Size = 512; 连接字符串2:Data Source=localhost;User ID=sa;Password=123;Initial Catalog=test; SQL SERVER数据库中的TCP/IP如果没有开启,只能用第二句连接字符串,开启都可用.字符串1是通过走网络的.

SQL Server 连接问题-TCP/IP

原文:SQL Server 连接问题-TCP/IP 出自:http://blogs.msdn.com/b/apgcdsd/archive/2012/02/24/ms-sql-server-tcp-ip.aspx TCP/IP的基本工作原理这里就不浪费口水了.现在这网络年代,谁不知道TCP/IP啊.不要跟我抬杠说你偏就没听说过TCP/IP阿,真是这样那你得自己去补补课了. TCP/IP协议有两个基本的东西,一个是IP地址, 另一个是端口号. 在SQL Server 上使用TCP/IP协议是非常简单

[UMU 学 golang](3) TCP Echo Server

测试需要,以前用 C + libevent 写了一个 TCP Echo Server,返回服务器时间.客户端地址信息和客户端发送的原内容.为了水一篇,现在改为 golang 实现. package main import ( "fmt" "io" "net" "os" "time" ) const BUFFER_SIZE = 1024 * 4 var buffer = make([]byte, BUFFER

进程对象的其他方法、守护进程、使用多进程实现 socket tcp协议 server端的并发(抢票程序)、队列、进程之间的通信(IPC)

# 进程对象的其他方法 from multiprocessing import Process import time class MyProcess(Process): def __init__(self, a, b): # 为了给子进程传递参数 super().__init__() self.a = a self.b = b def run(self): print("子进程开始执行") time.sleep(2) print("子进程结束", self.a,

【解决】 Streaming server stopped unexpectedly: listen tcp: lookup localhost on 114.114.114.114:53: no such host

我的问题:部署k8s时,kubelet一直无法启动. [[email protected] ~]# kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs --ignore-preflight-errors=all | tee kubeadm-init.log Flag --experimental-upload-certs has been deprecated, use --upload-certs inst