目 錄
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.
[連載]《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