欢迎光临
我们一直在努力

SuperSocket源码解析之开篇

一 简介

官方介绍: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源码解析之开篇

援引官方的对象模型示意图可以知道,SuperSocket主要分为SocketServer,AppServer以及与之对应的socketsessionappsession组成

1 其中SocketServer是SocketSession的容器,负责SocketSession的管理(创建,初始化,启动,关闭等);

 

2 SocketSession则是一个最小的通信单元也就是客户端与服务端一个Socket一条通信信道封装,负责消息发送,接收;

 

3 AppServer则是服务器的一个工作单元,一个服务器可以有多个AppServer共同组成,实现对不同端口进行Tcp或者Udp链接监听,并作为AppSession的容器和管理者,负责AppSession创建,初始化,启动,关闭等管理,向外界提供配置接口,日志接口,命令接口,连接过滤接口,接收过滤接口等等;

 

4 相应的AppSession则是工作在SocketSession上层的服务器会话单元,其主要职能在于负责将接收到的数据进行过滤,解析,以及路由到命令并执行,如上图所示

 

五 工作机制

SuperSocket源码解析之开篇

 

个人觉得上图从左至右第一个Session应细化成SocketSession更合适。

其工作机制也就是服务器何时开始工作,怎样工作,怎样处理接收和发送消息,这里可以参考官方给出的请求处理模型示意图,其具体步骤如下所述

1 SocketSession会话阶段

服务器启动监听器,进入监听状态等待客户端连接,当接收到一个客户端请求,验证并创建一个SocketSession会话;

2 AppSession会话阶段

  当接收到客户端一个Socket请求,封装成一个SocketSession时该会话已具备收发消息的能力,但是要处理数据还得有AppSession来处理,所以由AppServer根据SocketSeeion创建AppSession,并让该会话启动开始工作

3 消息处理阶段

当SocketSession接收到一个消息时,将交由AppSession进行处理,首先进行原始数据完整性和过滤特性进行处理,主要过滤掉一些不合法的消息或者被特性标记的,并将消息交由IReciveFilter进行协议解析封装成RequestInfo一类的结构,再路由给具体的命令执行单元进行具体处理执行

 

以上三步骤将客户端发送一条消息或者说一个数据包,在经历接收,检查,解析,命令处理过程,这些步骤经由SocketSession和AppSession工作在一个由AppServer负责启动的一个线程单元中,也就是说每一个 会话都将是一个线程在负责,而这些线程是交由ThreadPool负责管理,所以通篇都看不到一个显式的Thread创建并启动代码

 六 层次划分

SuperSocket源码解析之开篇

 

七  示例

在官方源码QuickStart文件夹中给出了一些列完整示例,可以直接启动并接收简单消息的处理,这些示例可以参考到文档中结合起来理解和使用

 

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《SuperSocket源码解析之开篇》
文章链接:https://www.456zj.com/20583.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址