Самая быстрая связь.
Это версия 7.2 пакета Netcom. В этой версии пакет Netcom теперь многоплатформенен! Вы можете собрать свои приложения на всех платформах в Firemonkey!
Этот набор компонентов является максимально быстрой реализацией коммуникаций сокетов на любом языке; Это чрезвычайно оптимизированный код на розетках TCP/IP. Забудьте об использовании потока для подключения: с помощью этого набора вы можете иметь столько одновременных подключений к своему серверу, сколько захотите. Потоки используются по запросу, а не для подключения, и поддерживаются в очень быстром классе пула потоков.
Реализация начинается с tnctcpserver и tnctcpclient, которые реализуют основные коммуникации сокета. Вы можете использовать tnctcpclient и tnctcpserver, если все, что вам нужно, это реализовать стандартные (но очень быстрые) соперные коммунальные компании.
Помимо розеток TCP/IP, внедрен легкий протокол, чтобы иметь возможность упаковать и распаковывать буферы (простой TCP/IP -трансляция транслируется и не имеет представления о четко определенном буфере). Набор компонентов, реализующих эту функциональность, - это TNCServerSource и TNCClientSource. Оба эти компонента реализуют execcommand (acmd, adata), который запускает событие OnhandleCommand с другой стороны (клиент может ExecCommand на сервер, или сервер может ExecCommand для любого клиента). ExecCommand может блокировать или не блокировать (асинхронизированные) в зависимости от того, как вы устанавливаете его параметр ArequiresResult. Если вы используете поведение блокировки, компонент по -прежнему обрабатывает входящие запросы от своих сверстников. Например, клиент -корм может ждать на ExecCommand на сервере, но во время ожидания он может обслуживать запросы execcommand с сервера!
Simple 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, вы увидите, что реализация не страдает от кода Slack, это довольно непосредственно. Встроенная конвенция о вызове использовалась везде, где считается подходящим. Самые основные функции были протестированы и оптимизированы путем мониторинга производительности посредством синхронизации больших петель и осмотра сборки, чтобы выжать каждый последний бит производительности.
Самая большая разница в увеличении скорости связана с архитектурой. В отличие от большинства типичных гнездоров:
Этот набор гнездов не вызывает ни пороть, ни не использует поток на соединение.
Это означает, что у вас может быть столько живых соединений, сколько захотите, и вы не увидите разницы в производительности! Пул потоков просто ждет любых запросов; Если поток должен был быть создан по запросу или на подключение, скорость сильно пострадала, так как создание потока довольно тяжело. Если количество запросов в секунду не может быть обработано пулом потоков, пул потоков увеличивается до максимального определенного размера, и если он все еще не может справиться, клиент просто ждет, пока сервер не получит готовую поток для обработки его запроса.
Особое внимание было уделено вопросам соединения. Например, разъединения сразу же поднимаются, и если линия настолько плохая, что разъединение не может быть поднято, она справляется с этим пакетом Heve Alive, с помощью которого он узнает фактический статус. Существует свойство воссоединения и собственность Keepalive. Когда клиент отключается, по какой -либо причине он пытается прозрачно подключиться и не влиять на производительность основного приложения. Таким образом, вам не нужно беспокоиться о том, чтобы держать своих клиентов подключенными.
Сжатие и шифрование также являются стандартными с этими компонентами без дополнительных библиотек. Конечно, вы можете использовать свое собственное сжатие или шифрование, если вы предпочитаете, но довольно удобно иметь только свойство, которое вы можете установить на компонент.
Этот набор компонентов также может иметь дело с выброшенными на них мусорными данными, они использовались и протестированы в огромных, общегосударственных проектах, где можно увидеть всевозможные атаки.
Усилия, которые программист должен предпринять для использования этих компонентов, минимальна по сравнению с другими рамками. Пожалуйста, обратитесь к демонстрациям для лучшего понимания того, как использовать эти компоненты.
Написано Биллом Анастасиосом Демо. Особая благодарность Даниэлю Маурику, Томми Прами, Роланд Бенгтссон за обширные испытания и предложения. Большое спасибо!
Vasdemos [at] yahoo [dot] co [dot] uk
** Delphi Rules **