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


1.C#跨平台物聯網通訊框架ServerSuperIO(SSIO)介紹

《連載 | 物聯網框架ServerSuperIO教程》1.4種通訊模式機制。

《連載 | 物聯網框架ServerSuperIO教程》2.服務實例的配置參數說明

《連載 | 物聯網框架ServerSuperIO教程》- 3.設備驅動介紹

《連載 | 物聯網框架ServerSuperIO教程》-4.如開發一套設備驅動,同時支持串口和網絡通訊。

《連載 | 物聯網框架ServerSuperIO教程》- 5.輪詢通訊模式開發及注意事項。

《連載 | 物聯網框架ServerSuperIO教程》- 6.並發通訊模式開發及注意事項

《連載 | 物聯網框架ServerSuperIO教程》- 7.自控通訊模式開發及注意事項

 


 

目       錄

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

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. 圖片

  1. 視頻


1.[連載]《C#通訊(串口和網絡)框架的設計與實現》

2.[開源]C#跨平台物聯網通訊框架ServerSuperIO(SSIO)介紹

2.應用SuperIO(SIO)和開源跨平台物聯網框架ServerSuperIO(SSIO)構建系統的整體方案

3.C#工業物聯網和集成系統解決方案的技術路線(數據源、數據采集、數據上傳與接收、ActiveMQ、Mongodb、WebApi、手機App)

5.ServerSuperIO開源地址:https://github.com/wxzz/ServerSuperIO

物聯網&集成技術(.NET) QQ群54256083 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM