首頁  >  文章  >  後端開發  >  網路通訊控制器分組,提高互動的負載平衡能力實例教程

網路通訊控制器分組,提高互動的負載平衡能力實例教程

零下一度
零下一度原創
2017-06-23 16:54:421577瀏覽

20.1     概述

     ServerSuperIO原來在網路通訊模式下,只有一個網路控制器,在自控模式、並發模式和單例模式下時都是非同步處理返回的數據,並不會出現效能問題。但是在輪詢模式下,一個網路控制器要依序逐一操作設備驅動的傳送和接收,這樣就會出現輪詢週期過長,達不到讀取資料頻率的情況。

     為了解決上述問題,現在將裝置驅動的參數增加了網路控制器分組功能,網路控制器會根據裝置參數設定的分組名稱控制裝置驅動。例如輪詢模式下,有1000個設備驅動,可以每10個設備驅動設定相同的分組名稱,這10個設備驅動受控於同一個網絡控制器,如果每間隔1s讀取一次數據,那麼每個設備驅動的輪詢週期是10s鐘,其他網路控制器類似。

20.2     網路控制器示意圖

 

      依據設定裝置驅動網路參數的ControllerGroup,可將裝置驅動程式指派到不同的網路控制中運行,且適用於輪詢、自控、並發和單例控制模式。

20.3     串口控制器示意圖

 

         順便提一下串口控制器,透過設定裝置驅動的串口號決定被指派到不同的串口控制器,此控制器只能適用於輪詢控制模式。

20.4     裝置驅動網路控制器分組範例程式碼

        static void Main(string[] args)
        {
            string deviceID = "2";
            DeviceDriver dev3 = new DeviceDriver();
            dev3.DeviceParameter.DeviceName = "设备2";
            dev3.DeviceParameter.DeviceAddr = 0;
            dev3.DeviceParameter.DeviceID = deviceID;
            dev3.DeviceParameter.DeviceCode = deviceID;
            dev3.DeviceDynamic.DeviceID = deviceID;
            dev3.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev3.DeviceParameter.NET.RemotePort = 9600;
            dev3.DeviceParameter.NET.ControllerGroup = "G2";
            dev3.CommunicateType = CommunicateType.NET;
            dev3.DeviceParameter.NET.WorkMode = WorkMode.TcpServer;
            dev3.Initialize(deviceID);
 
            deviceID = "3";
            DeviceDriver dev4 = new DeviceDriver();
            dev4.DeviceParameter.DeviceName = "设备3";
            dev4.DeviceParameter.DeviceAddr = 0;
            dev4.DeviceParameter.DeviceID = deviceID;
            dev4.DeviceParameter.DeviceCode = deviceID;
            dev4.DeviceDynamic.DeviceID = deviceID;
            dev4.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev4.DeviceParameter.NET.RemotePort = 9600;
            dev4.DeviceParameter.NET.ControllerGroup = "G3";
            dev4.CommunicateType = CommunicateType.NET;
            dev4.Initialize(deviceID);

            IServer server = new ServerManager().CreateServer(new ServerConfig()
            {
                ServerName = "服务1",
                ComReadTimeout = 1000,
                ComWriteTimeout = 1000,
                NetReceiveTimeout = 1000,
                NetSendTimeout = 1000,
                ControlMode = ControlMode.Loop,
                SocketMode = SocketMode.Tcp,
                StartReceiveDataFliter = false,
                ClearSocketSession = true,
                StartCheckPackageLength = false,
                CheckSameSocketSession = false,
            });

            server.AddDeviceCompleted += server_AddDeviceCompleted;
            server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
            server.SocketConnected+=server_SocketConnected;
            server.SocketClosed+=server_SocketClosed;
            server.Start();
 
            server.AddDevice(dev3);
            server.AddDevice(dev4);
 
            while ("exit"==Console.ReadLine())
            {
                 server.Stop();
            }
        }

 

以上是網路通訊控制器分組,提高互動的負載平衡能力實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn