《連載 | 物聯網架構ServerSuperIO教程》- 8.單例通訊模式開發及注意事項

來源:互聯網
上載者:User

標籤:pad   graph   www   lte   server   rman   tab   void   remote   

感謝唯笑志在分享
原博主原地址:
http://www.cnblogs.com/lsjwq/

 

目       錄

8.單例通訊模式開發及注意事項... 2

8.1           概述... 2

8.2           通訊機制說明... 2

8.3           裝置驅動開發注意事項... 2

8.4           宿主程式服務執行個體配置注意事項... 3

8.5           單例模式運行效果... 4

8.單例通訊模式開發及注意事項8.1    概述

    單例通訊模式只適用於網路通訊,並且只能增加一個“裝置驅動”,這裡“裝置驅動”是邏輯概念,代表了所有裝置或感應器,也就是說所有接到的資料全部分發給這個“裝置驅動”。

8.2    通訊機制說明

    只有網路通訊時可以使用這種控制模式。在一個服務執行個體內只能有一個裝置驅動,相當於一個裝置驅動對應著N多個硬體裝置終端。更適合通訊的資料協議有固定的標準,以命令關鍵字處理不同的資料。適用於高並發的硬體終端裝置主動上傳資料,伺服器端根據資料資訊進行處理和返回相應的資料。

   通訊結構如:

 

 

8.3    裝置驅動開發注意事項

     單例模式的裝置驅動開發更簡單,如果業務不複雜,那麼只涉及到初始化參數、即時資料、協議,以及資料的處理邏輯,更進階的應用會涉及到協議資料過濾(IReceiveFilter介面)、資料轉寄(IService介面)、資料檢視展示(IGraphicsShow介面)等,將在後續的文章中逐一進行介紹。

8.4    宿主程式服務執行個體配置注意事項

  sta

1234567891011121314151617181920212223242526272829303132333435 static void Main(string[] args){            //55 AA 00 61 43 7A 00 00 43 B4 15 0D            DeviceSingletonDriver dev1 = new DeviceSingletonDriver();            dev1.DeviceParameter.DeviceName = "網路裝置";            dev1.DeviceParameter.DeviceAddr = 0;            dev1.DeviceParameter.DeviceID = "0";            dev1.DeviceDynamic.DeviceID = "0";            dev1.DeviceParameter.DeviceCode = "0";            dev1.DeviceParameter.NET.RemoteIP = "127.0.0.1";            dev1.DeviceParameter.NET.RemotePort = 9600;            dev1.CommunicateType = CommunicateType.NET;            dev1.Initialize("0");             IServer server = new ServerManager().CreateServer(new ServerConfig()            {                ServerName = "單例服務",                NetReceiveBufferSize = 1024,                ControlMode = ControlMode.Singleton,                MaxConnects = 4000            });             server.AddDeviceCompleted += server_AddDeviceCompleted;            server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;            server.SocketConnected+=server_SocketConnected;            server.SocketClosed+=server_SocketClosed;            server.Start();             server.AddDevice(dev1);             while ("exit" == Console.ReadLine())            {                server.Stop();            }}

     ControlMode = ControlMode.Singleton設定成單位元模式就可以了。

8.5    單例模式運行效果

     在本機跑過10000萬個並發串連,用的jmeter,jmeter佔用了1.4G左右的記憶體、90%多的CPU,我也不知道為什麼這麼耗資源,筆記本勉強還能工作。

    現在類比的是15個用戶端,100毫秒發送一次資料,效果如下:

  1. 圖片

《連載 | 物聯網架構ServerSuperIO教程》- 8.單例通訊模式開發及注意事項

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.