C#SuperSocket的搭建--通过配置启动
之前我们借助一个SuperSocket实现了一个简易版的服务器, 但是不管是Server还是Session都是使用框架的,本篇博客我们要实现自己的Server和Session,来重写框架原生的Server或Session的方法,或添加自己所需的属性,来实现自己的业务逻辑,并且也不在使用事件来绑定接收,连接,或关闭事件,全部交给Bootstrap来执行,(这个Bootstrap并不是指前端框架的Bootstrap ,而是指的SuperSocket框架的一个引导程序或说是辅助程序),就是这里我们会使用Bootstrap 来配置启动SuperSocket;
本篇文章皆为我阅读官方文档后总结实现,所以很多代码是直接搬的官方文档的,我的主要目的是为了能实现并运行SuperSocket服务器,所以建议优先阅读官方文档
官方文档:http://docs.supersocket.net/v1-6/zh-CN
SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等。
怎么从NuGet安装SuperSocket就不再赘述了,我们直接看实现
首先我们可以按自己需求定义自己APPSession(因为我也不知道我自己定义的Session中应该有什么方法,什么属性,所以照搬官方文档了~~~)
- using SuperSocket.SocketBase;
- using SuperSocket.SocketBase.Protocol;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SuperSocket2.Session
- {
- public class MySession : AppSession<MySession>
- {
- protected override void OnSessionStarted()
- {
- this.Send("Welcome to SuperSocket Telnet Server");
- }
- protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
- {
- this.Send("Unknow request");
- }
- protected override void HandleException(Exception e)
- {
- this.Send("Application error: {0}", e.Message);
- }
- protected override void OnSessionClosed(CloseReason reason)
- {
- //add you logics which will be executed after the session is closed
- base.OnSessionClosed(reason);
- }
- }
- }
接着按自己需求定义自己APPServer,
- using SuperSocket.SocketBase;
- using SuperSocket.SocketBase.Config;
- using SuperSocket.SocketBase.Protocol;
- using SuperSocket2.Session;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SuperSocket2.Server
- {
- public class MyServer : AppServer<MySession>
- {
- public MyServer()
- : base(new CommandLineReceiveFilterFactory(Encoding.Default, new BasicRequestInfoParser(":", ",")))
- {
- }
- protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
- {
- return base.Setup(rootConfig, config);
- }
- protected override void OnStartup()
- {
- base.OnStartup();
- }
- protected override void OnStopped()
- {
- base.OnStopped();
- }
- }
- }
自定义的APPserver,在继承APPServer是的Session泛型,记得要更改为我们自定义的Session上一篇文章我们也说道,它默认的请求的 key 和 body 通过字符 ' ' 空格分隔, 因需求不同 我们可以将它改为 ':' 分隔 ,而且多个参数被字符 ',' 分隔,所以我们在修改了无参构造函数,来实现拓展命令行协议;
接下来要做的
所以我们来自己写一个命令类
- using SuperSocket.SocketBase.Command;
- using SuperSocket.SocketBase.Protocol;
- using SuperSocket2.Session;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Threading;
- namespace SuperSocket2.Command
- {
- /// <summary>
- /// 处理请求头为6003的命令
- /// </summary>
- public class CommandOne : CommandBase<MySession, StringRequestInfo>
- {
- public override string Name
- {
- get
- {
- return "";
- }
- }
- public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)
- {
- //向客户端返回信息,已接受到6003命令
- s.Send("Order 6003 received");
- }
- }
- }
请求处理代码必须被放置于方法 "ExecuteCommand(TAppSession session, TRequestInfo requestInfo)" 之中,并且属性 "Name" 的值用于匹配接收到请求实例(requestInfo)的Key。当一个请求实例(requestInfo) 被收到时,SuperSocket 将会通过匹配请求实例(requestInfo)的Key和命令的Name的方法来查找用于处理该请求的命令
但是由于类名的命名必须有字母数字下划线组成,且数字不能开头,如果要接收请求的Key为6003,我们就需要做一些修改
所以这里我重写了Name方法,这样,请求的Key是6003 也能触发CommandOne命令
好了,我们的自定义Server,Session,命令都写完了,接下来需要我们使用Bootstrap来配置启动,我们这里只为了保证SuperSocket能正常启动,所以不做多余的配置(☞配置示例)
修改App.config文件,添加<configuration>节点和<superSocket>节点
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <configSections>
- <section name="superSocket"
- type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
- </configSections>
- <superSocket>
- <servers>
- <!--serverType中,逗号左边的是你自定义的server在项目中的位置,逗号右边是项目名,ip就是服务器ip,port端口号-->
- <server name="TelnetServer"
- serverType="SuperSocket2.Server.MyServer,SuperSocket2"
- ip="Any" port="3666">
- </server>
- </servers>
- </superSocket>
- <startup>
- <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
- </startup>
- </configuration>
配置完毕,我们启动程序,在Form_load中实例化bootstrap,启动服务(原谅我懒,实在不愿意对这个Form美化了,就加了一个Richtextbox,显示一下是否初始化成功,启动成功)
- using SuperSocket.SocketBase;
- using SuperSocket.SocketEngine;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace SuperSocket2
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- //声明bootStrap实例
- var bootstrap = BootstrapFactory.CreateBootstrap();
- //初始化
- if (!bootstrap.Initialize())
- {
- SetMessage("Failed to initialize!");
- return;
- }
- //开启服务
- var result = bootstrap.Start();
- if (result == StartResult.Failed)
- {
- SetMessage("Failed to start!");
- return;
- }
- else
- {
- SetMessage("服务器启动成功");
- }
- //bootstrap.Stop();
- }
- public void SetMessage(string msg)
- {
- this.richTextBox1.Invoke(new Action(() => { this.richTextBox1.AppendText(msg + "\r\n"); }));
- }
- }
- }
好,一个简单的,完整的自定义SuperSocket就完成了,我们运行,借助TCP/UDP Socket调试工具执行6003命令试一下
这里说明一下,SuperSocket框架的命令行协议定义了每个请求必须以回车换行结尾 "\r\n";
所以我们输完6003:hello命令后,记得加回车;
测试完成,简易SuperSocket框架搭建成功
以上为我自己学习总结并实现,有错误之处,希望大家不吝赐教,感谢(抱拳)!
C#SuperSocket的搭建--通过配置启动的更多相关文章
- 总结:Mac前端开发环境的搭建(配置)
新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
- Redis Cluster集群搭建与配置
Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...
- windows下搭建及配置mantis缺陷管理工具
在windows XP 操作系统下,如何更快.更容易地搭建及配置mantis缺陷管理工具呢?以下是我实践的具体步骤: 一.安装mantis的前提环境,需要先安装Apache HTTP Server2. ...
- SuperSocket源码解析之启动过程
一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...
- Nacos集群环境的搭建与配置
Nacos集群环境的搭建与配置 集群搭建 一.环境: 服务器环境:CENTOS-7.4-64位 三台服务器IP:192.168.102.57:8848,192.168.102.59:8848,192. ...
- Ubuntu 16.04下Samba服务器搭建和配置(配截图)
一.相关介绍 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和 ...
- syslog-ng日志收集分析服务搭建及配置
syslog-ng日志收集分析服务搭建及配置:1.网上下载eventlog_0.2.12.tar.gz.libol-0.3.18.tar.gz.syslog-ng_3.3.5.tar.gz三个软件: ...
- NFS服务搭建与配置
启动NFS SERVER之前,首先要启动RPC服务(CentOS5.8下为portmap服务,CentOS6.6下为rpcbind服务,下同),否则NFS SERVER就无法向RPC服务注册了.另外, ...
随机推荐
- 33.JAVA编程思想——JAVA IO File类
33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...
- MongoDB副本集的原理,搭建
介绍: mongodb副本集即客户端连接到整个副本集,不关心具体哪一台机器是否挂掉.主服务器负责整个副本集的读写,副本集定期同步数据备份,一旦主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应 ...
- oracle 静默安装
下载oracle的安装包: 下载地址: 注意下载oracle是须要注冊oracle的 http://download.oracle.com/otn/nt/oracle11g 下载两个包: linux. ...
- NAND FLash基础概念介绍
一.引脚介绍 引脚名称 引脚功能 CLE 命令锁存功能 ALE 地址锁存功能 /CE 芯片使能 /RE 读使能 /WE 写使能 /WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N. ...
- to_char(sysdate,'D')的用法
select to_char(sysdate,'D') from dual; 这周的第几天:Day of week (1–7) 1,2,3,4,5,6,7--注意:每星期的第1天是”星期日“ se ...
- linux系列之-—03 压缩和解压缩命令
tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...
- C#语言循环语句for嵌套
- lodar
一个文件使用另一个文件的东西的时候需要使用到 export{开放} --watch 自动检测 可以加载打包的后边 module.exports = { entry:{ //入口文件 home:&quo ...
- 手把手编写自己的PHPMVC框架
1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- Python调用C/Fortran混合的动态链接库--上篇
内容描述: 在32位或64位的windows或GNU/Linux系统下利用Python的ctypes和numpy模块调用C/Fortran混合编程的有限元数值计算程序 操作系统及编译环境: 32bit ...