Как лучше организовать TCP Сервер и Клиент

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 13.06.2016 19:44:40

Уважаемые форумчане, у меня очень мало опыта в написании сетевых приложений, по этому хочу спросить - как лучше организовать TCP Сервер и Клиент?
Можно напрямую использовать ф-ии Accept, Send и Resv (конечно нужно использовать и др., но они вопросов не вызывают т.к. основной поток не блокируют. Ф-ции Accept, Send и Resv можно вынести в отдельные потоки (TThread) (там сначала Listen, потом в отдельном потоке уже Accept, когда будет запрос, создаём ещё поток, где уже Send и Resv. Однако читал, что этот метод требует много ресурсов от системы.
Можно организовать по событиям (прерываниям) Select (или WSAEventSelect). Там неск. сложнее, но суть заключается что-бы когда произойдёт событие, система об этом сообщит. И остаётся только обработать событие (вызвать Accept, Send и Resv) т.к. в буфере есть данные, то блокировки не будет. А может ещё кто какой способ предложит.
Поизучал модули Sockets, WinSocet и WinSocet2. Выяснил что модуль Sockets написан под какую-то задачу, более универсальны WinSocet и (более новый) WinSocet2, но они под Windows (а как в др. ОС?)
Модуль Sockets не позволяет некоторые вещи (или я чего-то не знаю).
Касательно моих запросов: у меня не будет подключено к одному северу много клиентов, скорее наоборот один клиент будет опрашивать много серверов. "Общаться" будут меж-собой Контролеры и SCADA по протоколу ModBus. Это не конкретная система, а компонент для написания SCADA.
У кого есть какие мысли по этому поводу???
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение DYUMON » 13.06.2016 20:41:10

Так а почему нельзя использовать готовые наборы библиотек типа fcl-net, indy, synapse? там же по идее клиенту надо будет подцепится к контроллеру, записать в сокет что то типа ':08170000000A20000001020000B4' + #13 + #10, прочитать ответ и отключиться? или соединение будет постоянным?
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 13.06.2016 21:06:28

DYUMON
В принципе Вы правы, почти так всё и выглядит. Правда протокол (модбус и др. тоже) подразумевает что мастер (главный) (у нас клиент) опрашивает слэйвы (у нас серсервера) по очереди. Без запроса они не отвечают. Опуская подробности запрос идет постоянно, в цикле, отключаться не надо. Даже больше, обрыв - это ошибка.
Что касается indy я думал что это http ориентированный. А synapse - устаревший и сейчас не используется. Я думал сокеты-более универсальны. Короче indy не подходит, а synapse - не знаю над поизучать.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение Little_Roo » 13.06.2016 22:12:40

vvvch писал(а): А synapse - устаревший и сейчас не используется

Это почему же? Проект не закрыт, легкий и востребованный...ИМХО...
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 638
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение скалогрыз » 13.06.2016 22:37:09

vvvch писал(а):А synapse - устаревший и сейчас не используется. Я думал сокеты-более универсальны.

...аха.
А чем отличается соединение через сокеты от TTCPBlockSocket из synapse?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 13.06.2016 22:48:55

Я считал, что synapse устарел, но скорее всего я не прав, раз есть несогласные. Я просто этого не знаю. Надо поизучать! И разобраться, я наткнулся на него, но ссылка было старая, вот я и подумал. Ладно займусь...
Но всё-таки вопрос, как быть с системными ресурсами, или это не важно? Кто, что скажет?

Добавлено спустя 12 минут 6 секунд:
Кто знает что такое sunapse объясните, пожалуйста, в двух словах, на пальцах. Мне нужно выяснить то это или нет, подойдёт, не подойдёт.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение скалогрыз » 13.06.2016 23:02:24

vvvch писал(а):Но всё-таки вопрос, как быть с системными ресурсами, или это не важно? Кто, что скажет?

Если постоянных соединений будет меньше 1000, то всё получится.

Добавлено спустя 49 минут 9 секунд:
vvvch писал(а):Кто знает что такое sunapse объясните

это как Indy, только легче (в смысле меньше кода), и очень и очень дружелюбен к FPC.

Официальный сайт. Наибольшая популярность, кстати, из России.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 14.06.2016 09:00:27

скалогрыз писал(а):скалогрыз

Разбираюсь... Пока "накопал" то, что это универсальная библиотека, которая много - чего позволяет. Но из всего этого многообразия мне нужно только простая передача данных (без всяких дополнительных тэгов) Скорее всего TTCPBlockSocket. Плюс к этому всему мне потребуется передача данных по com-портам (я об этом не писал, но надо) Тем более это сделано более единообразно и объектами.
Из минусов - надо устанавливать библиотеку. Она без платная, но всё - таки. Кроме того, я где-то читал, что нужны какие-то dll. Я с этим пока не столкнулся, но я и примеры не компилировал, только посмотрел. (нужно это или нет, скажите кто знает?) Если надо, придётся их копировать в system. Кроме того это не приложение, а компонент и кроме него есть кому кушать ресурсы системы и не хотелось-бы всё упиралось в него. Таких компонентов может быть не один.
Что скажете?
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение DYUMON » 14.06.2016 10:15:08

Вот тут http://www.webdelphi.ru/2013/12/kniga-o-synapse-glava-0-sokety/ у человека подробно описана работа с synapse.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 14.06.2016 10:37:33

DYUMON
Во первых, спасибо за информацию, я как раз искал учебник по библиотеке... Это хорошо.
Но сейчас надо всё-таки решить "связываться" с ней. Из плюсов - единообразие и , я думаю, опыт др. людей что-бы сгладить трудности. Из минусов - использование доп. файлов (их надо скачивать и устанавливать) (библиотеки сокетов и портов есть в системе, их скачивать не надо) и выяснить требовательность к ресурсам.
Я это определить не могу, это надо у кого есть опыт использования.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение Ichthyander » 14.06.2016 12:10:49

Ничего устанавливать не нужно для использования synapse. Ну то есть можно установить библиотеку synapse как компонент lazarus, но это не обязательно, даже не нужно. Обычные исходники. Просто указываете в блоке uses и добавляете пути к исходникам библиотеки. Как если бы эти исходники были частью Вашего кода.
dll никакие тоже не нужны в Вашем случае
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение DYUMON » 14.06.2016 13:33:00

единственный раз когда нужны были библиотеки к synapse это когда я использовал для подключения openssl.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 14.06.2016 14:49:52

Что касается Synapse - разбираюсь. Спасибо за наводку.
DYUMON Synapse сама библиотека, какие ещё библиотеки понадобились? Она вроде SSL поддерживает (но вопрос риторический, так для общего образования)
А не риторический вопрос (так никто и не ответил), какие ресурсы системы (процессорное время, память и др. загрузка оборудования) может потребоваться? Обмен будет идти постоянно, в цикле (прекращение обмена - авария). Кроме того возможен и не один сеанс (они, сеансы будут идти одновременно) когда потребуется опрашивать несколько контроллеров (но их будет, как правило, не больше двух десятков) Впрочем это как организуешь сеть. А основная нагрузка - это графика и получение данных с локального сервера типа MySQL.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение Vadim » 14.06.2016 15:17:25

vvvch писал(а): какие ресурсы системы (процессорное время, память и др. загрузка оборудования) может потребоваться?

У Вас жёсткое ограничение по ресурсам? Промышленные компы с 64 КБ памяти? Или всё-таки обычные?
У меня Synapse работало с сервером "Ирбис" и единственная проблема которая там возникала - если кол-во запросов больше, чем 1 раз в секунду - сервер вешался и не мог их обработать. Естественно сама Synapse там была совсем не при чём.
Так что про ресурсы Вы вопрос формулируете неправильно - никто Вам на него в таком виде не ответит.
Ресурсы Вы и сами можете посчитать, для этого надо знать:
1. Объём памяти на один используемый компонент (одна выполняемая операция) * количество потоков его использующих.
2. Процессорное время на один используемый компонент (одна выполняемая операция) * кол-во потоков его использующее.
???
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как лучше организовать TCP Сервер и Клиент

Сообщение vvvch » 16.06.2016 11:26:34

Vadim
Да, Вы правы. Библиотека Synapse - это, как я понял, "обёртка" над системными сокетами и ничего существенно она не добавит, как и не убавит (добавляет только удобство пользования). По этому чем бы я не пользовался ситуация одинакова.
А компьютеры у меня обычные (PC-совместимые, правда не последней модели, такие обычно используются в качестве операторских станций). Контролеры мы не рассматриваем, это отдельная тема.
А потребили ресурсов обычно графика и базы.
Рассчитать я не могу, это не готовая система а компонент, который будут использовать для готовых систем другие.
Аватара пользователя
vvvch
постоялец
 
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Alex2013 и гости: 28

Рейтинг@Mail.ru