ServerBuilder是BeetleX新版本添加对象,用于进一步简化TCP服务的构建。ServerBuilder对象提供两个泛型版本:一个是针对网络数据流操作,另一个则针对协议解释器的对象处理操作。
网络数据流
当需要解释简单的网络数据流时使用ServerBuilder<APPLIATION, SESSION>类,类带有两个泛参:APPLIATION用于描述一个全局的对象数据,SESSION则用于描述当前连接的对象数据。针对类的使用如下:
using BeetleX;
using BeetleX.EventArgs;
using System;namespace Server
{class Program : IApplication{private static ServerBuilder<Program, User> server;public static void Main(string[] args){server = new ServerBuilder<Program, User>();server.SetOptions(option =>{option.DefaultListen.Port = 9090;option.DefaultListen.Host = "127.0.0.1";}).OnStreamReceive(e =>{Console.WriteLine($"session:{e.Session}\t application:{e.Application}");if (e.Reader.TryReadLine(out string name)){Console.WriteLine(name);e.Writer.WriteLine("hello " + name);e.Flush();}}).Run();Console.Read();}public void Init(IServer server){Console.WriteLine("application init");}}public class User : ISessionToken{public void Dispose(){}public void Init(IServer server, ISession session){Console.WriteLine("session token init");}}
}
通过OnStreamReceive方法来获取接收的数据流处理,对象有Reader和Writer对象用于数据读取和写入;最后通过Flush来提交写入的网络数据。
协议解释器
借助于协议解释器可以定义网络数据流和数据对象的转换,这样可以让网络操作更简单。ServerBuilder<APPLICATION, SESSION, Packet>可以定义一个基于Packet协议分析器的服务对象,使用代码如下:
using System;
using BeetleX;
using BeetleX.Buffers;
using BeetleX.EventArgs;namespace Server
{public class Program : IApplication{private static ServerBuilder<Program, User, Messages.JsonPacket> server;public static void Main(string[] args){server = new ServerBuilder<Program, User, Messages.JsonPacket>();server.ConsoleOutputLog = true;server.SetOptions(option =>{option.DefaultListen.Port = 9090;option.DefaultListen.Host = "127.0.0.1";option.LogLevel = LogType.Trace;}).OnMessageReceive<Messages.Register>((e) =>{Console.WriteLine($"application:{e.Application}\t session:{e.Session}");e.Message.DateTime = DateTime.Now;e.Return(e.Message);}).OnMessageReceive((e) =>{}).Run();Console.Read();}public void Init(IServer server){Console.WriteLine("application init");}}public class User : ISessionToken{public void Dispose(){Console.WriteLine("client disposed");}public void Init(IServer server, ISession session){Console.WriteLine("session init");}}
}
通过OnMessageReceive方法来定义接收消息处理方法,也可以通过指定类型的消息对应处理。
BeetleX
开源跨平台通讯框架(支持TLS)
提供HTTP,Websocket,MQTT,Redis,RPC和服务网关开源组件
https://beetlex-io.com