一 简介
官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等。
地址:http://www.supersocket.net/
目前所阅读的版本是:1.6.4.0
本笔记的基本思路为:Supersocket是什么,主要功能,组成结构,启动过程,工作机制,如何高性能,如何高并发,以及如何可扩展等方面进行
二 基础知识
1 Net4.0以上编程基础,熟悉lamada表达式,Tpl多核并行异步编程,泛型编程(非常重要),多线程(线程池),反射,特性等基础知识;
2 熟悉常见的设计模式,工厂模式,命令模式,代理模式,其中工厂模式在SuperSocket配置系统中大量使用,也是具有高扩展性重要基础之一;
3 Tcp/ip基本概念,通信过程;
4 IOCP(完成端口)相关概念;
5 Log4Net日志组件;
6 常见的服务器会话机制;
三 主要功能
如官方介绍所言,可以作为轻量级的服务器程序框架,其核心在于进程之间通过Socket进行通信达到数据交换的目的,当然也可以作为一款三方通信组件,其主要作用在于建立服务端与客户端或者其他端点的通信,管理,维护,并提供常见的通信协议,解析等,也可以自定义协议和协议处理相关接口,所以说SuperSocket在首先满足通信前提下同时提供常见的协议处理,也提供直接作为应用程序的服务器应用程序框架。
四 组成结构
援引官方的对象模型示意图可以知道,SuperSocket主要分为SocketServer,AppServer以及与之对应的SocketSession、AppSession组成
1 其中SocketServer是SocketSession的容器,负责SocketSession的管理(创建,初始化,启动,关闭等);
2 SocketSession则是一个最小的通信单元也就是客户端与服务端一个Socket一条通信信道封装,负责消息发送,接收;
3 AppServer则是服务器的一个工作单元,一个服务器可以有多个AppServer共同组成,实现对不同端口进行Tcp或者Udp链接监听,并作为AppSession的容器和管理者,负责AppSession创建,初始化,启动,关闭等管理,向外界提供配置接口,日志接口,命令接口,连接过滤接口,接收过滤接口等等;
4 相应的AppSession则是工作在SocketSession上层的服务器会话单元,其主要职能在于负责将接收到的数据进行过滤,解析,以及路由到命令并执行,如上图所示
五 工作机制
个人觉得上图从左至右第一个Session应细化成SocketSession更合适。
其工作机制也就是服务器何时开始工作,怎样工作,怎样处理接收和发送消息,这里可以参考官方给出的请求处理模型示意图,其具体步骤如下所述
1 SocketSession会话阶段
服务器启动监听器,进入监听状态等待客户端连接,当接收到一个客户端请求,验证并创建一个SocketSession会话;
2 AppSession会话阶段
当接收到客户端一个Socket请求,封装成一个SocketSession时该会话已具备收发消息的能力,但是要处理数据还得有AppSession来处理,所以由AppServer根据SocketSeeion创建AppSession,并让该会话启动开始工作
3 消息处理阶段
当SocketSession接收到一个消息时,将交由AppSession进行处理,首先进行原始数据完整性和过滤特性进行处理,主要过滤掉一些不合法的消息或者被特性标记的,并将消息交由IReciveFilter进行协议解析封装成RequestInfo一类的结构,再路由给具体的命令执行单元进行具体处理执行
以上三步骤将客户端发送一条消息或者说一个数据包,在经历接收,检查,解析,命令处理过程,这些步骤经由SocketSession和AppSession工作在一个由AppServer负责启动的一个线程单元中,也就是说每一个 会话都将是一个线程在负责,而这些线程是交由ThreadPool负责管理,所以通篇都看不到一个显式的Thread创建并启动代码
六 层次划分
七 示例
在官方源码QuickStart文件夹中给出了一些列完整示例,可以直接启动并接收简单消息的处理,这些示例可以参考到文档中结合起来理解和使用
SuperSocket源码解析之开篇的更多相关文章
-
SuperSocket源码解析之开篇 (转)
一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...
-
SuperSocket源码解析之启动过程
一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...
-
SuperSocket源码解析之消息处理
一 简述 Tcp消息的处理本身是与Tcp消息传输过程独立的,是消息的两个不同阶段,从前面的会话生命周期我们已经知道消息的传输主要有SocketSession实现,而真正处理则交由AppSession实 ...
-
SuperSocket源码解析之配置系统
一 继承Net配置系统 Net应用程序配置机制跟程序集引用大致类似,均具有继承性,如iis几乎每个应用程序都会有一个Web.config,比如我们使用vs2012以上版本创建一个web应用程序会自带一 ...
-
SuperSocket源码解析之会话生命周期
一 基本概念 会话(Session)是客户端与服务器进行通信的基本单元,也是一个Socket的封装,在http协议中也有Session机制,其主要作用封装一个通信单元socket,负责服务器与客户端消 ...
-
Spring源码解析系列汇总
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...
-
Maven 依赖调解源码解析(一):开篇
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第一篇,主要做个开头介绍.并为后续的实验做一些准备.系列文章总目录参见:https://www.cnblogs.com/xia ...
-
jQuery整体架构源码解析(转载)
jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...
-
给jdk写注释系列之jdk1.6容器(5)-LinkedHashMap源码解析
前面分析了HashMap的实现,我们知道其底层数据存储是一个hash表(数组+单向链表).接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持 ...
随机推荐
-
onSaveInstanceState() 和 onRestoreInstanceState()
本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用 ...
-
解决passwd 为普通用户设密码 不成功的方法
echo "xxxxxxxxx"|passwd --stdin user_name #这样设置密码就可以成功!
-
MahApps.Metro怎么调用消息窗口
网上查看了好多资料,没有找到很清楚明了的结果,经过了多天的研究,无意发现了这个方法来进行全局调用 效果展示:
-
剑指offer--面试题10
题目:求整数二进制表示中1的个数. 分析:此题直接考查二进制表示与位运算!!! 正数和负数的二进制表示不同!在计算机中,正数的二进制表示即为通常所写的二进制:而负数的二进制表示则用补码表示,即原码的反 ...
-
Android Bundle的使用
发送数据: Bundle bundle = new Bundle(); bundle.putString("sex" , "男人"); bundle.putDo ...
-
iOS开发之视图控制器(UIViewController)
视图控制器应该在MVC设计模式中扮演控制层(C)的角色,UIViewController的职责对内管理与之关联的View,对外跟其他UIViewController通信和协调.一个视图控制器管理一个视 ...
-
sar使用说明
sar这东西,一开始还以为是内部有的,原来是外部的工具,可以到 http://pagesperso-orange.fr/sebastien.godard/download.html 去下载 1 安装 ...
-
【实验吧】CTF_Web_登录一下好吗?
实验吧CTF---Web篇 1. 打开登录地址(http://ctf5.shiyanbar.com/web/wonderkun/web/index.html),发现为一个登录界面,第一想到的是查看源代 ...
-
Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
-
插件使用一进度条---nprogress
nprogress 是像youtube一样在顶部出现进度条,用在一些加载比较缓慢的场景中. 官方网站是 http://ricostacruz.com/nprogress/ 源码在 https://gi ...