>  기사  >  백엔드 개발  >  대화형 로드 밸런싱 기능을 개선하기 위한 네트워크 통신 컨트롤러 그룹화 예제 튜토리얼

대화형 로드 밸런싱 기능을 개선하기 위한 네트워크 통신 컨트롤러 그룹화 예제 튜토리얼

零下一度
零下一度원래의
2017-06-23 16:54:421578검색

20.1 개요

ServerSuperIO는 원래 네트워크 통신 모드에서 네트워크 컨트롤러가 하나만 있었습니다. 자동 모드, 동시 모드 및 싱글톤 모드에서는 반환된 데이터가 비동기적으로 처리되므로 성능 문제가 없습니다. 그러나 폴링 모드에서는 네트워크 컨트롤러가 디바이스 드라이버의 송수신을 하나씩 순차적으로 수행해야 하므로 폴링 주기가 너무 길어지고 데이터를 읽는 빈도에 도달하지 못할 수 있습니다.

위의 문제를 해결하기 위해 이제 장치 드라이버의 매개변수에 네트워크 컨트롤러 그룹화 기능이 추가되었습니다. 네트워크 컨트롤러는 장치 매개변수에 설정된 그룹 이름에 따라 장치 드라이버를 제어합니다. 예를 들어, 폴링 모드에는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.