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主要分为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, 可扩展的 Socket 服务器框架

  • 开源项目SuperSocket的学习笔记

  • 使用LogMaster4Net实现应用程序日志的集中管理

  • SuperSocket与Netty之实现protobuf协议,包括服务端和客户端


原文地址:http://www.cnblogs.com/rjjs/p/5618773.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java守护线程概述

转载自 Java守护线程概述Java的线程分为两种:User Thread(用户线程)、DaemonThread(守护线程)。 只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束是,守护线程随着JVM一同结束…

php while循环次数,php while循环得到循环次数

php while循环得到循环次数复制代码 代码如下:$link mysql_connect(localhost,root,pwd);mysql_select_db(db);$sql "select region_id,local_name from regions where region_grade1";$result mysql_query($sql);$i 0;while ($row mysql_fetch_assoc($result)) {…

EntityFramework和EntityFramework.Extended使用说明——性能,语法和产生的sql

环境说明:EntityFramework 6.1.3和.Net Framework4.5性能注意事项:https://msdn.microsoft.com/zh-cn/library/cc853327.aspx比较精髓的一点:查询执行的各个阶段中的准备查询,每个唯一查询一次。包括编写查询命令、基于模型和映射元数据生成命令树和定义所返回数据的形状的成本…

三个水桶(看了三遍,想了五遍!)

转载至:微信公众号: 创业励志网 一 有位木匠砍了一树,把它做了三个木桶。 一个装粪,就叫粪桶,众人躲着; 一个装水,就叫水桶,众人用着; 一个装酒,就叫酒桶&…

nginx解析php失败,为什么nginx不能解析php?

只运行过这些代码yum install -y vim wget zip unzip git httpd php php-mysql php-odbc php-ldap php-gd php-mbstring php-xml php-xml-rpc php-bcmath libjpeg* mariadb ;rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarc…

.NET Core amp; ASP.NET Core 1.0在Redhat峰会上正式发布

众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项。这个团队已经一起工作好几个月了,RHEL对.NET有许多需求。今天在RedHat 峰会DevNation 上宣布了.NET Core & ASP.NET Core 1.0 RTM。Red Hat有一个新的关于在…

任务调度(三)——Timer的替代品ScheduledExecutorService简介

转载自 任务调度(三)——Timer的替代品ScheduledExecutorService简介先前的两篇博文《任务调度(一)——jdk自带的Timer》和《任务调度(二)——jdk自带的Timer 动态修改任务执行计划》中,简单介绍了一下Timer,可以实现几本的功能,但是在多线程…

jquery实现动态五角星评分

先上代码&#xff0c;最后附属上我的实现思路&#xff0c;新手做的bug多&#xff0c;大牛勿喷&#xff1a;请看代码&#xff1a; ☆☆☆☆☆<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans…

php中时间轴,PHP时间轴函数

26 04 2013PHP时间轴函数Yinchiang | 0我们会经常看见现在许多网站的留言或者评论的时间变得十分有趣&#xff0c;刚刚、3分钟前、1天前等等人性化的时间轴好吧&#xff0c;我承认这个函数是转载的&#xff0c;部分按照自己的需求修改了一点点。/*** 时间轴函数&#xff0c;单位…

开源Asp.Net Core小型社区系统

前言 盼星星盼月亮&#xff0c;Asp.Net Core终于发布啦&#xff01;&#xff01; Asp.Net发布时我还在上初中&#xff0c;没有赶上。但是Asp.Net Core我从beta版本便一直关注。最初项目名叫Asp.Net VNext&#xff0c;然后改名叫Asp.Net 5。最煎熬的是RC1发布后&#xff0c;官方…

Java多线程干货系列(1):Java多线程基础

转载自 Java多线程干货系列&#xff08;1&#xff09;&#xff1a;Java多线程基础前言 多线程并发编程是Java编程中重要的一块内容&#xff0c;也是面试重点覆盖区域&#xff0c;所以学好多线程并发编程对我们来说极其重要&#xff0c;下面跟我一起开启本次的学习之旅吧。 正文…

php accesscontrolalloworigin,设置Access-Control-Allow-Origin实现跨域访问

这篇文章主要介绍了Ajax 设置Access-Control-Allow-Origin实现跨域访问,非常不错&#xff0c;具有参考借鉴价值&#xff0c;需要的朋友可以参考下ajax跨域访问是一个老问题了&#xff0c;解决方法很多&#xff0c;比较常用的是JSONP方法&#xff0c;JSONP方法是一种非官方方法&…

.NET Core:面向未来的开源跨平台开发技术

作为一种全新的开源和跨平台的开发平台&#xff0c;.NET Core 历经两年多的开发&#xff0c;终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本。.NET Core 是一种通用开发平台&#xff0c;它包含了自动内存管理和现代化高级开发语言等重要特性&#xf…

Sublime Text 3 快捷键总结(拿走)

以下是个人总结不完全的快捷键总汇&#xff0c;祝愿各位顺利解放自己的鼠标。选择类CtrlD 选中光标所占的文本&#xff0c;继续操作则会选中下一个相同的文本。AltF3 选中文本按下快捷键&#xff0c;即可一次性选择全部的相同文本进行同时编辑。举个栗子&#xff1a;快速选中并…

Java多线程学习

转载自 Java多线程学习本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。在这之前&#xff0c;首先让我们来了解下在操作系统中进程和线程的区别&#xff1a;进程&#xff1a;每个进程都有独立的代码和数据空间&#…

php面试心得,php面试题的总结

这篇文章介绍的内容是关于php面试题的总结&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下1. 什么事面向对象&#xff1f;主要特征是什么&#xff1f;面向对象是程序的一种设计方式&#xff0c;它利于提高程序的重用性&#xf…

展望C# 7

译者&#xff1a;雪落无痕 xdj 目前的 C# 编译器&#xff08;即 Roslyn&#xff09;于 2014 年 4 月开源。目前不仅是编译器在 GitHub 上开发&#xff1b;语言的设计也是进行公开的讨论。 这允许感兴趣的各方了解语言下一个版本的样子。这篇文章概述了当前在设计语言新特性时的…

Java 线程池详解及实例代码

转载自 Java 线程池详解及实例代码这篇文章主要介绍了Java 线程池的相关资料,并符实例代码&#xff0c;帮助大家学习参考&#xff0c;需要的朋友可以参考下线程池的技术背景 在面向对象编程中&#xff0c;创建和销毁对象是很费时间的&#xff0c;因为创建一个对象要获取内存资…

jQuery最简单的留言功能^-^

先上代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"en"> <h…

rocketmq java home,rocketmq 安装与配置以及遇到的问题

不废话&#xff0c;搞起双M 模式环境1&#xff0c;java-1.8这里有个问题&#xff0c;centos 安装yum install java-1.8 是只是安装的java 运行环境jre&#xff0c;还缺少开发包所以在编译的时候会有问题&#xff0c;使用yum install yum install java-1.8.0-openjdk-devel* 这…