一 简介

  官方介绍: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文件夹中给出了一些列完整示例,可以直接启动并接收简单消息的处理,这些示例可以参考到文档中结合起来理解和使用

连接地址 :http://www.cnblogs.com/rjjs/p/5617916.html

SuperSocket源码解析之开篇 (转)的更多相关文章

  1. SuperSocket源码解析之开篇

    一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...

  2. SuperSocket源码解析之启动过程

    一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...

  3. SuperSocket源码解析之消息处理

    一 简述 Tcp消息的处理本身是与Tcp消息传输过程独立的,是消息的两个不同阶段,从前面的会话生命周期我们已经知道消息的传输主要有SocketSession实现,而真正处理则交由AppSession实 ...

  4. SuperSocket源码解析之配置系统

    一 继承Net配置系统 Net应用程序配置机制跟程序集引用大致类似,均具有继承性,如iis几乎每个应用程序都会有一个Web.config,比如我们使用vs2012以上版本创建一个web应用程序会自带一 ...

  5. SuperSocket源码解析之会话生命周期

    一 基本概念 会话(Session)是客户端与服务器进行通信的基本单元,也是一个Socket的封装,在http协议中也有Session机制,其主要作用封装一个通信单元socket,负责服务器与客户端消 ...

  6. Spring源码解析系列汇总

    相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...

  7. Maven 依赖调解源码解析(一):开篇

    本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第一篇,主要做个开头介绍.并为后续的实验做一些准备.系列文章总目录参见:https://www.cnblogs.com/xia ...

  8. jQuery整体架构源码解析(转载)

    jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...

  9. 给jdk写注释系列之jdk1.6容器(5)-LinkedHashMap源码解析

    前面分析了HashMap的实现,我们知道其底层数据存储是一个hash表(数组+单向链表).接下来我们看一下另一个LinkedHashMap,它是HashMap的一个子类,他在HashMap的基础上维持 ...

随机推荐

  1. Android屏幕适配问题详解

    上篇-Android本地化资源目录详解 :http://www.cnblogs.com/steffen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm ...

  2. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

  3. Node.js学习笔记(二):模块

    模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的.一个 Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码.JSON 或者编译过的 C/C++ 扩展. ...

  4. 笔记本WiFi共享

    1.桌面右击新建txt文件复制下面两行代码,修改文件后缀名为bat保存文件 netsh wlan set hostednetwork mode=allow ssid=zhangxh key=xiaoh ...

  5. springmvc-interceptor(拦截器)

    在大配置中配置拦截器代码如下: <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" ...

  6. QGIS

    project(GisFreeMap) set(CMAKE_BUILD_TYPE Debug) find_package(Qt4 REQUIRED QtCore QtGui QtXml) includ ...

  7. scip习题(1) scheme和c实现的对比

    习题1.3 定义一个过程,它以三个数为参数,返回其中较大的两个数的平方和. (Define a procedure thats three numbers as argument and return ...

  8. centos安装ganttproject

    官网下载 http://www.ganttproject.biz/ 我的JAVA早已经安装了. 问题:root #ganttproject 提示org.bardsoftware.eclipsito.B ...

  9. swift3.0 原生GET请求 POST同理

    swift3.0 原生GET请求  POST同理 func getrequest(){ let url = URL(string: "http://117.135.196.139:" ...

  10. thinkphp判断是否为手机

    一.问题: 近日准备给自己的网站做一个小升级,让用户在手机二维码扫描的时候显示适合手机端来展示的模版[我用的是ThinkPHP3.0],代码是参考别人的 二.实现方法: 这里先说下大概的一个思路 简单 ...