SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,由江振宇先生开发,之所以选用它是因为一下几点恰好复合项目需求:

  • 开源,基于Apache 2.0协议,可以免费使用到商业项目.
  • 高性能的事件驱动通信.
  • 会话级别的发送队列能够让你通过会话并发的发送数据,并保持高性能和可控性.
  • 强大且高性能的协议解析实现工具帮你简化了网络数据的分析工作:自带多种数据帧过滤器,可实现自己的数据帧过滤器,可自定义数据内容协议,粘包拆包都是浮云.
  • 轻量级意味着组件可以自由选择使用,可根据环境变化变更.

SuperSocket的架构和设计可以在官方的中文文档查询到http://docs.supersocket.net/v1-6/zh-CN/Architecture-Diagrams

SuperSocket的工作流程如图:

每个连接的客户端都以session的方式管理,发送数据给客户端也通过session的send方法,每个客户端发过来的数据流都经过ReceiveFilter过滤器(这里即可自定义协议或者使用自带的一些帧过滤器)到ReqestInfo,ReqestInfo包含了该条数据内容,当然如果是自定义的协议,可以实现自己的ReqestInfo,把数据包内容直接装入帧对象.

官方的文档和demo也是花了一段时间才知道怎么使用达到项目需求的功能,由于项目是做采集设备数据的TCP服务器,通信帧格式也是比较常见的设计,所以大概个需求明白了,官方的文档和demo里没有详细讲解这一块,但是也基本指引了我们该怎么去做这样的一个服务程序.

首先,官方文档最简单示例是:Telnet服务器.

Telnet示例: 默认的AppServer是设计成了Telnet方式的协议,所以直接配置->启动->注册连接,断开,数据接收事件->逻辑处理,就完成最简单的功能了,用windows自带的Telnet调试即可明白.同时学习SuperSocket的还有一点就是看下载的sourcecode的quickstrat项目,各种场景都涉及到了.

虽然SuperSocket是一个屌炸天的框架,但是默认的AppServer我相信还是不符合大部分人是开发场景,我只想用里面最普通的TCP服务器功能,收发下数据,管理下连接,又或者我要实现带XXX协议的过滤的TCP服务器,我根本就不想用Telnet.所以,拓展AppServer那是必须的功课了.

为了减少码农的工作量,有时间去泡妹子,伟大的SuperSocket真是无微不至,自带了各种常见的帧过滤器,内置的常用协议实现模版如下:

  • TerminatorReceiveFilter (SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter, SuperSocket.SocketBase)
  • CountSpliterReceiveFilter (SuperSocket.Facility.Protocol.CountSpliterReceiveFilter, SuperSocket.Facility)
  • FixedSizeReceiveFilter (SuperSocket.Facility.Protocol.FixedSizeReceiveFilter, SuperSocket.Facility)
  • BeginEndMarkReceiveFilter (SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter, SuperSocket.Facility)
  • FixedHeaderReceiveFilter (SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter, SuperSocket.Facility)

以上模板的使用可参考官方文档http://docs.supersocket.net/v1-6/zh-CN/The-Built-in-Common-Format-Protocol-Implementation-Templates

这里前几个模板可能使用不是复杂,使用场景也比较少,至于BeginEndMarkReceiveFilter和FixedHeaderReceiveFilter的使用就稍微复杂,但是他们基本可以满足比较常用的行业使用的协议.

后一篇将做一个demo使用FixedHeaderReceiveFilter来解析自定义的协议帧

本文由http://www.cnblogs.com/xiepeixing/原创,转载请著名出处

认识SuperSocket 1.6.4的更多相关文章

  1. 基于SuperSocket的IIS主动推送消息给android客户端

    在上一篇文章<基于mina框架的GPS设备与服务器之间的交互>中,提到之前一直使用superwebsocket框架做为IIS和APP通信的媒介,经常出现无法通信的问题,必须一天几次的手动回 ...

  2. supersocket+controller+action

    public class MasterServer : SuperSocket.SocketBase.AppServer<MasterSession> { } public class M ...

  3. 我的第一个Socket程序-SuperSocket使用入门(三)

    本来博客都停了,不打算更了,但今天百度一个socket的问题时无意间发现第一篇的socket文章权重仅次于SuperSocket网站,顿时觉得自己6到不行,再写一篇,讨论下数据持久化的问题 去年搞那个 ...

  4. SuperSocket 1.6.4 通过FixedHeaderReceiveFilter解析自定义协议

    SuperSocket 提供了一些通用的协议解析工具, 你可以用他们简单而且快速的实现你自己的通信协议: TerminatorReceiveFilter (SuperSocket.SocketBase ...

  5. SuperSocket架构设计示意图【转】

    转自:http://docs.supersocket.net/v1-6/zh-CN/Architecture-Diagrams 中文(中国)Toggle Dropdown v1.6Toggle Dro ...

  6. 如何获取supersocket的源代码

    源代码的地址:https://github.com/kerryjiang/SuperSocket 安装git之后,可以使用命令行git clone https://github.com/kerryji ...

  7. supersocket中quickstart文件夹下的MultipleCommandAssembly的配置文件分析

    首先确认下配置文件中的内容 第一部分configSections[需要注意的是name=superSocket] <configSections> <section name=&qu ...

  8. 开源项目SuperSocket的学习笔记

    近几日想在一个项目中引进一个Socket Server,用来接收客户端发送的命令消息并根据具体的业务逻辑对消息进行处理,然后转发给其它在线的客户端.因为以前在博客园关注过江大渔开源的SuperSock ...

  9. 基于SuperSocket实现的WebSocket(后端)

    关于WebSocket其实很早就想发了,奈何之前项目中的WebSocket的后端不是我做的,而我又想前后端都发出来和大家讨论讨论~于是挤出点时间研究了一下WebSocket的后端实现(所以才有了这篇文 ...

随机推荐

  1. Eclipse连接到My sql数据库的操作总结/配置数据库驱动

    Eclipse连接到MYSQL数据库的操作 (自己亲测,开始学习Eclipse(我的Eclipse版本是4.5.2,Jdbc驱动器的jar包版本是5.1.7,亲测可以使用)连接到数据库的时候,发现网上 ...

  2. windows10 qt5 mingw32编译cryptopp563

    windows10 qt5 mingw32编译cryptopp563 参考链接: http://www.qtcentre.org/threads/28809-Compiling-amp-using-C ...

  3. 用Wireshark提取WPA握手包

    进入正文前,先来看一张截图,如图1,使用“aircrack-ng wpa.cap -w password.lst”命令后,程序会提示输入待破解网络的序号,此时只要提供一个序号即可.注意:1:命令中不需 ...

  4. 【Vegas原创】SVN的搭建及安装使用

    中文手册:http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/index.html 所需程序: 1,TortoiseSVN  http://so ...

  5. 【linux】修改文件所属用户和组

    使用chown命令可以修改文件或目录所属的用户: 命令:chown 用户 目录或文件名 例如:chown qq /home/qq  (把home目录下的qq目录的拥有者改为qq用户) 使用chgrp命 ...

  6. Linux Futex的设计与实现(转)

    引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序" ...

  7. Javascript 严格模式

    简介 严格模式是一种将更好的错误检查引入代码中的方法. 在使用严格模式时,你无法使用隐式声明的变量.将值赋给只读属性或将属性添加到不可扩展的对象等. 声明严格模式 可以通过在文件.程序或函数的开头添加 ...

  8. Windows搭建SVN

    1.服务器下载 VisualSVN 地址:http://subversion.apache.org/packages.html 2.然后下载TortoiseSVN客户端,如果要下中文语言包 也在这个页 ...

  9. bash的循环中无法保存变量

    在bash中,如果循环在一个子shell中运行,那么在循环中对循环外面的变量的更改将在循环退出后不可见.像下面的例子: #!/bin/sh python run.py | while read lin ...

  10. 博为iHospital-HIS医院信息系统产品系列

    博为软件iHospital-HIS产品系列式面向大中型医院应用的完整医院流程信息化产品,覆盖了医院主要的业务流程,管理职能,和病人在医院诊疗的各个环节.将医院流程的优化与软件系统完美结合,为建立数字化 ...