가능한 가장 빠른 커뮤니케이션.
Netcom 패키지의 버전 7.2입니다. 이 버전에서 Netcom 패키지는 이제 멀티 플랫폼입니다! Firemonkey의 모든 플랫폼에서 앱을 컴파일 할 수 있습니다!
이 구성 요소 세트는 모든 언어에서 소켓 통신을 가장 빠르게 구현하는 것입니다. 이것은 TCP/IP 소켓에서 매우 최적화 된 코드입니다. 연결 당 스레드를 사용하는 것을 잊어 버리십시오 :이 스위트를 사용하면 원하는만큼 서버에 동시 연결을 많이 할 수 있습니다. 스레드는 요청 당 사용되며 연결 당되지 않으며 매우 빠른 스레드 풀 클래스에서 유지됩니다.
구현은 기본 소켓 통신을 구현하는 tnctcpserver 및 tnctcpclient로 시작합니다. 원하는 모든 것이 표준 (그러나 매우 빠른) 소켓 통신을 구현하는 것만 큼 tnctcpclient 및 tnctcpserver를 사용할 수 있습니다.
TCP/IP 소켓 외에도, 경량 프로토콜은 버퍼를 포장하고 풀 수 있도록 구현됩니다 (간단한 TCP/IP가 스트리밍되고 잘 정의 된 버퍼의 개념이 없습니다). 이 기능을 구현하는 일련의 구성 요소는 tncserversource 및 tncclientsource입니다. 이 두 구성 요소는 모두 execcommand (ACMD, ADATA)를 구현하여 다른 쪽에서 OnHandleCommand 이벤트를 트리거합니다 (클라이언트가 서버로 실행할 수 있거나 서버가 클라이언트에 대한 사업을 실행할 수 있음). execcommand는 arequiresresult 매개 변수를 설정하는 방법에 따라 차단 또는 비 블로킹 (Async) 일 수 있습니다. 차단 동작을 사용하는 경우 구성 요소는 여전히 동료의 수신 요청을 처리합니다. 예를 들어, ClientSource는 Execcommand에서 서버로 기다릴 수 있지만 기다리는 동안 서버에서 Execcommand 요청을 제공 할 수 있습니다!
간단한 Senario : 서버 :
- You put a TncServerSource on your form.
If you want you can change the port it is listening to via the
Port property.
- You implement an OnHandleCommand event handler and,
depending on aCmd parameter (integer), you respond the result of
the command via setting the Result of the OnHandleCommand to
anything you like (TBytes). If an exception is raised while in
HandleCommand, it is trapped, packed, transfered accross to the
calling peer, and raised at the peer's issued ExecCommand.
This way exceptions can be handled as if they were raised locally.
- You set the Active property to true. Your server is ready.
고객:
- You put a TncClientSource on your form.
You can set Host and Port to whatever you want.
- You set Active property to true.
Your client is now connected to the server.
- You call ExecCommand (on your TncClientSource), with any
command number and data that you like. This will send your
command and data over to the server, call its OnHandleCommand,
pack the response, and return it as a result to your ExecCommand.
- ExecCommand is blocking (if aRequiresResult parameter is set to true),
but only for the current command issued.
The TncClientSource's OnHandleCommand still executes, so,
while waiting for a command to return, your client socket may be
processing requests from your server (a server can also
ExecCommand to a client).
- If you have forgotten to set Active to true and call ExecCommand,
the TncClientSource will first try to connect, so you can ommit
setting this property. It will also try to connect if it knows
it has been disconnected (and the Reconnect property is set to true).
이 구성 요소 세트는 타의 추종을 불허하는 속도를 약속하며 이는 단지 말이 아닙니다.
netcomvsindy 데모를 사용한 간단한 타이밍 테스트는 다음과 같은 결과를 제공합니다.
기본 장치 인 ncsockets.pas를 시작으로 구현에 슬랙 코드가 고통받지 않으며 즉각적입니다. 인라인 통화 규칙은 적절한 곳에서 사용되었습니다. 핵심 기능은 대형 루프의 타이밍 및 어셈블리 검사를 통해 성능을 모니터링하여 모든 마지막 성능을 확장시켜 테스트 및 최적화되었습니다.
속도 이득에서 가장 큰 차이점은 아키텍처 때문입니다. 가장 일반적인 소켓과 달리 :
이 소켓 세트는 연결 당 스레드를 스폰하거나 사용하지 않습니다.
이것은 당신이 원하는만큼 라이브 연결을 가질 수 있고 성능에 차이가 없음을 의미합니다! 스레드 풀은 요청을 기다립니다. 요청에 따라 스레드가 생성되거나 연결에 따라 스레드를 만드는 것이 매우 무겁기 때문에 속도는 많이 고통받습니다. 스레드 풀에서 초당 요청 횟수를 처리 할 수없는 경우 스레드 풀은 최대 정의 된 크기까지 커지고 여전히 대처할 수없는 경우 클라이언트는 서버가 요청을 처리 할 준비된 스레드를 가져올 때까지 기다립니다.
연결 문제에도 특히주의를 기울였습니다. 예를 들어, 분리가 즉시 픽업되며, 선이 너무 나빠서 분리를 끊을 수 없으면 실제 상태를 알 수있는 유지 패킷으로이를 해결합니다. 재 연결 속성 과 keepalive 속성이 있습니다. 클라이언트가 연결이 끊어지면, 어떤 이유로 든 기본 응용 프로그램의 성능에 영향을 미치지 않고 투명하게 다시 연결하려고합니다. 이렇게하면 고객을 연결하는 것에 대해 걱정할 필요가 없습니다.
압축 및 암호화는 추가 라이브러리가 필요하지 않은 이러한 구성 요소의 표준입니다. 물론 원하는 경우 자신만의 압축 또는 암호화를 사용할 수 있지만 구성 요소에 설정할 수있는 속성 만 있으면 편리합니다.
이 구성 요소 세트는 또한 이들이 발생하는 쓰레기 데이터를 다룰 수 있으며, 모든 종류의 공격을 볼 수있는 전국 전반의 거대한 프로젝트에서 사용 및 테스트되었습니다.
프로그래머가 이러한 구성 요소를 사용하기 위해 노력하는 노력은 다른 프레임 워크에 비해 최소한입니다. 이러한 구성 요소를 사용하는 방법에 대한 이해를 더 잘 이해하려면 데모를 참조하십시오.
Bill Anastasios Demos에 의해 작성되었습니다. 광범위한 테스트 및 제안에 대한 Daniel Mauric, Tommi Prami, Roland Bengtsson에게 특별한 감사를드립니다. 매우 감사합니다!
vasdemos [at] yahoo [dot] co [dot] uk
** 델파이 규칙 **