在SuperSocket入門(二)中我們已經簡單瞭解了通過配置App.config文件使用BootStrap啟動SuperSocket服務。我們先來看一下上個案例中的基本配置文件示例: <?xml version="1.0" encoding="utf-8"?> <configuration> <c ...
在SuperSocket入門(二)中我們已經簡單瞭解了通過配置App.config文件使用BootStrap啟動SuperSocket服務。我們先來看一下上個案例中的基本配置文件示例:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!--log 日誌記錄--> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> <!--SocketEngine--> <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine"/> </configSections> <!--服務信息描述,在window服務模式下的名稱標識--> <appSettings> <add key="ServiceName" value="SupperSocketService"/> <add key="ServiceDescription" value="黃昏前黎明後的Socket程式"/> </appSettings> <!--SuperSocket服務配置信息 serverType是項目的服務如我自定義的myserver--> <!--name: 實例名稱 serverType: 實例運行的AppServer類型 ip: 偵聽ip port: 偵聽埠--> <superSocket> <servers> <!--textEncoding 編碼方式"gb2312","utf-8" 預設是acii--> <server name="SuperSocketDemo" textEncoding="gb2312" serverType="SuperSocketDemo.Server.MyServer,SuperSocketDemo" ip="Any" port="2020" maxConnectionNumber="100"> </server> </servers> </superSocket> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/> </startup> </configuration>App.config
1、服務名稱:
<appSettings>
<add key="ServiceName" value="SupperSocketService"/>
<add key="ServiceDescription" value="黃昏前黎明後的Socket程式"/> </appSettings> 這個配置項將被用作SuperSocket系統服務的名稱。如果ServiceName設置成SupperSocketService, 則運行InstallService.bat這個批處理文件之後(註意:該處理文件使用的是SuperSocket.SocketService.exe -i命令,使用supersocket.socketservice.exe務必使server所需要的所有程式集都和SuperSocket.SocketService.exe在同一目錄), SuperSocket系統服務將以"SupperSocketService"這個名字安裝到系統之中。 2、 SuperSocket的根配置 <socketServer loggingMode="IndependantFile"> .... </socketServer> 根配置中的參數詳情: loggingMode 值: ShareFile: 多個伺服器實例共用同日誌文件,預設選項; IndependantFile:多個伺服器實例擁有獨立的日誌文件; Console: 控制台日誌輸出,只在控制台應用程式中有效。 maxWorkingThreads:線程池最大工作線程數量 minWorkingThreads:線程池最小工作線程數量 maxCompletionPortThreads:線程池最大完成埠線程數量 minCompletionPortThreads:線程池最小完成埠線程數量 3、伺服器實例配置 <servers> <server name="SuperSocketDemo" textEncoding="gb2312" serverType="SuperSocketDemo.Server.MyServer,SuperSocketDemo" ip="Any" port="2020" maxConnectionNumber="100"> </server> </servers> 伺服器實例配置詳情:- name: 伺服器實例名稱
- serviceName: 指定伺服器實例運行的服務的名稱。此名稱為定義此伺服器實例運行的服務的節點的名稱。
- ip: 指定socket伺服器監聽的伺服器IP地址。Any: 監聽本機所有的IPv4地址;IPv6Any, 監聽本機所有IPv6的地址。
- port: 指定socket伺服器監聽的埠。
- mode: Sync:同步模式;Async: 非同步模式;Udp: Udp協議
- disabled: true或者false。是否禁用該伺服器實例,預設為否。
- readTimeOut: 從socket讀取數據超時時間,預設為0。
- sendTimeOut: 從socket發送數據超時時間,預設為0。
- maxConnectionNumber: 最大允許的客戶端連接數目,預設為100。
- receiveBufferSize: 用於接收數據的緩衝區大小,預設為2048。
- sendBufferSize: 用戶發送數據的緩衝區大小,預設為2048。
- logCommand: true或者false,是否記錄命令。
- clearIdleSession: true或者false, 是否清除空閑會話,預設為false。
- clearIdleSessionInterval: 清除空閑會話的時間間隔,預設為120,單位為秒。
- idleSessionTimeOut: 會話超時時間,預設值為300,單位為秒。
- security: Empty, Tls或者Ssl3。 Socket伺服器所採用的傳輸層加密協議,預設值為空。
- maxCommandLength: 最大允許的命令長度,預設值為1024。
- disableSessionSnapshot: 是否禁用會話快照,預設值為false。(1.4 SP1)
- sessionSnapshotInterval: 生成會話快照的時間間隔。預設值為5,單位為秒。
- keepAliveTime: keep alive消息發送時間間隔。預設值為600, 單位為秒。
- keepAliveInterval:keep alive失敗重試的時間間隔。預設值為60, 單位為秒。
public class MyServerA : AppServer { private IDespatchServer m_DespatchServer; protected override void OnStartup() { m_DespatchServer = SocketServerManager.GetServerByName("ServerB") as IDespatchServer; base.OnStartup(); } internal void DespatchMessage(string targetSessionKey, string message) { m_DespatchServer.DispatchMessage(targetSessionKey, message); } }MyServerA 類
public class MyServerB : AppServer, IDespatchServer { public void DispatchMessage(string sessionKey, string message) { var session = GetAppSessionByIndentityKey(sessionKey); if (session == null) return; session.SendResponse(message); } } }MyServerB 類
interface IDespatchServer { void DispatchMessage(string sessionKey, string message); }IDespatchServer類 這樣就可以在MyServerA中通過調用MyServerB實例的方法來向MyServerB的客戶端發送消息了。使用 SuperSocket 實現 Socket 伺服器的時候,不可避免的需要在配置文件中定義一些參數。 SuperSocket 提供了非常簡單的方法,讓我們在配置文件中定義這些參數,然後在代碼中讀取它們。服務端擴展配置,自定義屬性欄位我們後面再來學習。