SuperSocket基础一
SuperSocket基础(一)——————基本概念
项目中之前一直使用TCP socket服务框架,但是不利于扩展。最近刚接触到开源的superSocket感觉很不错,特记录一下。官方开源地址:http://www.supersocket.net/
基本概念:
SuperSocket:是一个可扩展的Socket开源框架,是一个轻量级、跨平台而且可扩展的.Net/Mono Socket 服务器程序框架。可以轻松的使用SuperSocket开发出一款Socket服务软件。
功能特点:
1、高性能的事件驱动通信。
2、简单易用,创建几个类即可获得一个健壮的Socket服务器。
3、内置的命令协议能够迅速创建一个网络命令行接口服务器。
4、强大的性能的协议解析实现工具简化了网络数据的分析工作。
5、灵活的配置和友好的API。
6、多监听器支持,让一个服务器实例监听多个客户端。
7、多服务器的实例托管的支持复杂的部署需求。
8、应用程序域和进程级别的隔离能够满足大部分的宿主场景。
9、内置的SSL/TLS加密支持。
10、会话级别的发送队列能够通过会话并发送数据,并保持高性能和可控性。
11、SuperSocket的命令处理模式让你的业务逻辑更清晰,更有条例。
12、优良的可扩展 API 支持: Command Filter, Connection Filter, Command Loader;
13、可替换的日志框架能够满足喜欢的日志组件。
14、动态语言的支持,允许Python等脚本语言来实现命令。
15、与Mono/Linux保持二进制级别的兼容。
架构设计示意图:
层次示意图:
层次解析:
SuperSocket 层次
一、设备层:基于flash和SilverLight的策略服务器和基于接收过滤器的协议实施。
二、应用层:可扩展的应用程序服务:包括多种API集成。会话容器和命令框架。
三、套接字层: 通过传输协议TCP和UDP的事件驱动套接字服务。
SuperSocket对象模型示意图
模型解析:
1、应用服务AppServer 包括命令Commands, 会话容器Session contaioner。
2、对象层次:基本配置Config->命令过滤器Command Filters->日志和日志工厂Log/LogFactory->命令装载机CommandLoaders->接收过滤器工厂ReceiveFilterFactory->连接过滤Connection Filters。
3、Socket 服务:多客户端监听,TCP1 、TCP2、。。。。UDP。
SuperSocket 请求处理模型示意图
模型解析:
1、客户端携带数据流与Server端Socket Listener建立连接之后,SuperSocket 服务就将这一个连接视为一个Session会话。表示客户端和服务器端的一个逻辑连接,数据的收发都是在这个Session中进行处理的(此过程中的数据流为二进制数据)。
2、携带数据流的Session通过默认或者自定的接受过滤器将过滤后的数据传递到RequestInfo对象。每一个客户端对象都得实例化一个RequestInfo类,将接收到的二进制流转换成请求的实例。详细的概念将在下文中进行整理总结。
3、根据RequestInfo执行Command命令,一个Command 包含一个Session和RequestInfo,在Command中根据需求解析数据。也可通过Session向客户端发送数据,例如有些DTU或者RTU设备需要发送指令才能返回数据。
通过请求处理模型可以总结基本的开发流程:
1、实例化AppServer对象,时刻监听客户端的会话。
2、定义RequestInfo实体类型,接收和处理二进制字符流。
3、定义数据接收过滤器,ReceiveFilter,接收过滤后的数据,并将数据赋值给RequestInfo实体类型。
4、在appServer的构造函数中继承使用接收过滤工厂RequestFilterFactory,并执行自定的ReceiveFilter和RequestInfo。
5、在1的数据请求委托事件中解析并使用RequestInfo实体中对应的数据。
下一篇以官方实例为例进行总结
SuperSocket基础一的更多相关文章
- SuperSocket基础(二)-----一个完成SocketServer项目
SuperSocket基础(二)-----一个完成SocketServer项目 由于时间关系未能及时更新,关于SuperSocket,对于初学者而言,一个SuperSock的Server真的不好写.官 ...
- SuperSocket基础二
SuperSocket基础(二)-----一个完整的SocketServer项目 由于时间关系未能及时更新,关于SuperSocket,对于初学者而言,一个SuperSock的Server真的不好写. ...
- DotNetty网络通信框架学习之初识Netty
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- SuperSocket 最基础入门
---恢复内容开始--- SuperSocket 是什么? 首先我们明确一下SuperSocket 本质是什么? 网络框架 ! ok , 那么我们直接上上官网,作者已经开源到Github,可以做两件 ...
- 基于SuperSocket实现的WebSocket(后端)
关于WebSocket其实很早就想发了,奈何之前项目中的WebSocket的后端不是我做的,而我又想前后端都发出来和大家讨论讨论~于是挤出点时间研究了一下WebSocket的后端实现(所以才有了这篇文 ...
- SuperSocket与Netty之实现protobuf协议,包括服务端和客户端
今天准备给大家介绍一个c#服务器框架(SuperSocket)和一个c#客户端框架(SuperSocket.ClientEngine).这两个框架的作者是园区里面的江大渔. 首先感谢他的无私开源贡献. ...
- SuperSocket源码解析之开篇
一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...
- SuperSocket源码解析之开篇 (转)
一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...
- SuperSocket入门(五)-常用协议实现模版及FixedSizeReceiveFilter示例
Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难以避免.SuperSocket内置了命令行 ...
随机推荐
- jQuery DOM 元素方法 (十)
函数 描述 .get() 获得由选择器指定的 DOM 元素. .index() 返回指定元素相对于其他指定元素的 index 位置. .size() 返回被 jQuery 选择器匹配的元素的数量. . ...
- HTML、CSS、JS 复习——序
HTML在MVC中担任着M的角色.由HTML组成的节点称之为HTML DOM.要想成为一流的大神,就必须能分分钟建立起一个强大的HTML DOM.而要做到这点,就必须了解甚至精通HTML. CSS在M ...
- CSS预编译器less简单用法
1.变量 定义变量 @变量名:值; @test_width:100px; 使用变量 .box{ width:@test_width; height:@test_width; background-co ...
- sublime自动保存(失去焦点自动保存)
sublime是轻量的编辑器,经常用sublime编辑器来做一些小例子,使用起来很方便. 在使用sublime的时候需要不断的 ctrl + s 保存代码,才能看到效果. 这样的操作很繁琐,保存的多了 ...
- Linux sftp 另外一台机器时,出现:receive message is too long
因为在linux登录时,首先会运行的三个文件是: /etc/profile,/home/用户名/.bashrc,其次是/home/用户名/.bash_profile,出现这个问题的原因是因为在sftp ...
- 使用Python实现的杨辉三角
def triangel(): print ' '*(20*3)+str(1) #定义起始两行 print ' '*(19*3)+str(1)+' '*5+str(1) for i in range( ...
- dulicate symbol for architecture i386 或者其他什么CPU架构 比如i386
昨天群里有个哥们遇到和么一个问题 , 错误的大概意思呢,就是 重复定义了 一个名字. 解决办法,只能修改名字啊. 而且,错误信息 也很明确的 支出了 重复定义的类文件名字PassGuardViewC ...
- [转]python变量作用域的有趣差别
func()里 可以访问全局变量i,但不能给i重新赋值. i = 1 def func(): print( i + 1) func() # 2 用global声明后,可以给i重新赋值. i = 1 d ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
前言 Hi,大家好,我是Rector 时间飞逝,一个星期又过去了,今天还是星期五,Rector在图享网继续跟大家分享系列文本:一步一步创建ASP.NET MVC5程序[Repository+Autof ...
- loadrunner-获取返回值和自定义参数(参数运算)
实例:手机端操作,A新增了一条事件(返回结果:事件id,例如:1), A这时需要获取新增产生的事件id,并作为参数进行传递,才能将这条事件上报给B(返回结果:事件id不变,步骤id等于事件id加1), ...