??? 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