Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 20.08.2013, 20:39   #1
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 371
Репутация: 46
По умолчанию ServerSocket ClientSoket или Winsock?

Господа помогите определиться с выбором.
Есть сетка из статических IP адресов.
Есть сервер (назовем его SRV01), и есть компы-клиенты для ровного счета возьмем 1024 ))). (беру специально больше 255)
На сервере хранится БД, в которой записано какому пользователю есть доступ к какому клиенту.
На клиенте №284 стоит программа и БД, которая выполняет какие-то свои функции, например читает данные с com-порта и сохраняет их в свою БД. За клиента садиться админ и создает нового пользователя для этого клиента, нужно отправить данные на сервер в отдельном потоке, что на клиенте №284 появился новый юзер.
И наоборот, на сервере создаем нового пользователя и даем ему доступ к клиентам №256,№342,№486,№136. Естественно тоже в отдельном потоке, по крайней мере мне так кажется, так как сервер работает на постоянный прием от клиентов.
Подскажите как организовать такую работу, с применением каких компонентов это будет проще. Если можно с примерами.
Спасибо.
tarakan1983 вне форума   Ответить с цитированием
Старый 20.08.2013, 20:43   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

Раз уж
Цитата:
сервер работает на постоянный прием от клиентов
то зачем на клиентах
Цитата:
стоит программа и БД, которая выполняет какие-то свои функции
?

Может одну БД на всех стоит сделать?
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 20.08.2013, 20:46   #3
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 371
Репутация: 46
По умолчанию

Цитата:
Может одну БД на всех стоит сделать?
Нет, сеть не локальная.
Куда должен девать клиент данные, прочитанные с com-порта, если интернета нет 3-4 дня?
tarakan1983 вне форума   Ответить с цитированием
Старый 20.08.2013, 22:01   #4
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

Теперь ясно. Тогда так: в БД заведи поле, в котором будет true если запись эта реплицированна на сервер и false если еще не успела попасть на сервер.
Время от времени проверяй инет, и если он появился начинай из БД передавать порциями скажем по 10 записей на одну транзакцию. По завершению транзакции выставляй поле в true. Так ты будешь знать что у тебя передано и что нет, и программе просто нужно будет выбирать только то где поле в false.
Теперь по теме: Что за СУБД? Если она способна принимать запросы с удаленных провайдеров то нужно не винсок или сокет а именно через этого провайдера.
Естесственно желательно чтоб пров стоял у всех клиентов - это надежнее чем делать свой передатчик.

Ну и неувязочка в рассуждения:
Цитата:
сервер работает на постоянный прием от клиентов
Цитата:
интернета нет 3-4 дня
Определись уже.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 20.08.2013, 22:09   #5
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 371
Репутация: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Теперь ясно. Тогда так: в БД заведи поле, в котором будет true если запись эта реплицированна на сервер и false если еще не успела попасть на сервер.
Время от времени проверяй инет, и если он появился начинай из БД передавать порциями скажем по 10 записей на одну транзакцию. По завершению транзакции выставляй поле в true. Так ты будешь знать что у тебя передано и что нет, и программе просто нужно будет выбирать только то где поле в false.
Это уже реализовано, данные для передачи складируются в отделной таблице там есть такое поле, БД Firebird, поэтому поле integer 0-нет 1-да.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Теперь по теме: Что за СУБД? Если она способна принимать запросы с удаленных провайдеров то нужно не винсок или сокет а именно через этого провайдера.
Естесственно желательно чтоб пров стоял у всех клиентов - это надежнее чем делать свой передатчик.
БД Firebird, можно тут подробнее???

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну и неувязочка в рассуждения:
Я же говорю клиентов, например, 1024. И 1023 клиента передают данные, а у 1024-го мыша кабель перегрызла. Что тогда???
tarakan1983 вне форума   Ответить с цитированием
Старый 21.08.2013, 08:06   #6
Slym
Профессионал
 
Регистрация: 07.12.2011
Адрес: Siberia
Сообщений: 1,008
Репутация: 698
По умолчанию

1024 - потенциальных клиентов или постоянных? т.е. ени эпизодически подключаются или постоянно поддерживают коннект?
это я к чему: под поток по дефолту выделяется 1Мб стека, 1024 клиента одновременно подключенные к серверу с поточной/блокирующей моделью отгрызут у сервера минимум 1Гб памяти из 2Гб доступных.

если же одновременных клиентов меньше то можно заморочиться на поточной/блокирующей модели
иначе нужно смотреть в сторону неблокирующих сокетов или IOCompletitionPort
Slym вне форума   Ответить с цитированием
Старый 21.08.2013, 08:17   #7
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

Цитата:
БД Firebird, можно тут подробнее???
Отлично ставь им ODBC провайдер огнептички (с оффсайта скачать мона), настраивай его на IP сервака (в его настройках это можно), где БД вращается и клиент сам будет инсертить в базу
Я бы и не выдумывал в этом случае ничего своего, если ODBC не заупрямится.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестирующая программа (на PHP или JavaScript или Delphi или Visual Basic) @@@Сергей@@@ Фриланс 2 05.05.2011 17:48
winsock udp сервер в потоке, не работает при создании формы или обращению к VCL компоненту marikcool Работа с сетью в Delphi 1 01.10.2010 00:57
Есть ли у IdTCPServer такое свойство как у ServerSocket: ServerSocket.Socket.ActiveConnectio ns? TwiX Работа с сетью в Delphi 3 07.03.2010 15:28
[TcpClient, TcpServer] или [ServerSocket, ClientSocket] работа через прокси DOLBY Работа с сетью в Delphi 2 17.09.2009 05:46
SSL через WinSock или через что? Jolyk Win Api 2 07.06.2008 17:37


20:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru