ホームページ  >  記事  >  バックエンド開発  >  インタラクティブな負荷分散機能を向上させるためのネットワーク通信コントローラーのグループ化のサンプル チュートリアル

インタラクティブな負荷分散機能を向上させるためのネットワーク通信コントローラーのグループ化のサンプル チュートリアル

零下一度
零下一度オリジナル
2017-06-23 16:54:421623ブラウズ

20.1 概要

ServerSuperIO は元々、ネットワーク通信モードでネットワーク コントローラーを 1 つだけ備えていました。自動モード、同時モード、シングルトン モードでは、返されたデータは非同期で処理され、パフォーマンスの問題は発生しません。ただし、ポーリングモードでは、ネットワークコントローラがデバイスドライバの送受信を1つずつ順番に動作させる必要があるため、ポーリング周期が長すぎてデータの読み出し頻度に達しない場合があります。

上記の問題を解決するために、ネットワーク コントローラーのグループ化機能がデバイス ドライバーのパラメーターに追加され、ネットワーク コントローラーはデバイス パラメーターで設定されたグループ名に従ってデバイス ドライバーを制御します。たとえば、ポーリング モードでは、1000 個のデバイス ドライバがあり、10 個のデバイス ドライバごとに同じグループ名を設定できます。これらの 10 個のデバイス ドライバは、1 秒ごとにデータが読み取られる場合、各ポーリングが制御されます。デバイスドライバーの周期は10秒で、他のネットワークコントローラーと同様です。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。