Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2013, 20:39   #1
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию 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,097
По умолчанию

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

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

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

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

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

Цитата:
Сообщение от 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
Сообщений: 1,025
По умолчанию

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестирующая программа (на 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 14:28
[TcpClient, TcpServer] или [ServerSocket, ClientSocket] работа через прокси DOLBY Работа с сетью в Delphi 2 17.09.2009 05:46
SSL через WinSock или через что? Jolyk Win Api 2 07.06.2008 17:37