Клиент-серверное приложение

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

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

Re: Клиент-серверное приложение

Сообщение ANTIKLAN » 18.01.2016 03:00:00

azsx писал(а):
а значит нужна база данных.

я бы для себя на этом пункте весь вопрос о взаимосвязи клиента с сервером снял. Асинхронную связь через интернет проще всего организовать с бд. На клиенте делаете sqlite, на сервере бд постгрес (все бд просто пример). В sqlite кэш для данных на случай сбоя инета на постгрес. Ради безопасности временную таблицу (ы) поля: акк юзера, мак адрес юзера, поле текст для всего его трафика или более конкретные поля. Также можно юзать представления, тригеры и прочую муть. Таким образом написание серверной части отпадет или станет значительно проще.
По идее у вас будет "умный клиент" но я не уверен, что вы верно понимаете отличия клиентов.
зы
но обратите внимание я также не писал таких приложений.

Нет. Это не подойдет. Вычисления должны производиться именно на сервере. Это основное требование. База это уже как сопутствующее, но не основное.
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Re: Клиент-серверное приложение

Сообщение azsx » 18.01.2016 03:31:13

Нет. Это не подойдет. Вычисления должны производиться именно на сервере. Это основное требование. База это уже как сопутствующее, но не основное.

вы меня невнимательно прочитали. Допустим у вас критичные к подмене значений расчеты или просто ресурсоемкие. Так пишите тогда серверное приложение, оно вам необходимо.
Вы хотите посредством tcp-ip на легком клиенет (значит многоплатформенный) соединяться с серверным приложением. Допустим передавать ему 2 цифры (100 рублей и 5 шук). Вы (как и я) не являетесь гуру в создании такой взаимосвязи. Так Вместо этого, организуйте связь через бд на сервере. Серверным софтом постоянно отверяйте наличие новых записей в временной таблице. Если запись на бд сервера появилась обрабатывайте ее на сервере и пишите в соседнее поле юзеру результат. Плюсы:
1. вся связь отлично описана. 2. по правам там можно настроить чо угодно. 3. как до тригеров процедур доберетесь, так ваще задумаетесь, чо серверный софт делает.
Минус если вам надо пинг как в играх - не пойдет мой метод, всё равно надо будет пинговать сервак.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: Клиент-серверное приложение

Сообщение vitaly_l » 18.01.2016 14:01:16

yeger писал(а):это про сервер Апач и соответственно у вас будет не просто приложение, а CGI. на него просто сделайте редирект в index.html

Супер CGI ! <== Это, то, что нужно!!! Спасибо.

Топик стартеру: С учётом того, что выше сказал, yeger - всё остальное на сервере будет работать точно так же как на локальной машине. Поэтому из своей серверной программы, обращайтесь к БД как к обычной БД на локальной машине и всё будет работать.


.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Клиент-серверное приложение

Сообщение ANTIKLAN » 18.01.2016 22:37:13

Есть ли у кого нибудь пошаговое руководство как сделать клиент и сервер для работы через интернет? Вообще непонятно как такое делать.
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Re: Клиент-серверное приложение

Сообщение Mirage » 18.01.2016 23:56:56

Я такие приложения писал, но на Java.
Для Паскаля сейчас самое оптимальное по-видимому использовать для этих целей Synopse mORMot framework.
Там с точки зрения обмена данными и серверная часть просто делается и клиентская.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Клиент-серверное приложение

Сообщение Снег Север » 18.01.2016 23:59:00

Думаю, что пошагового нет в принципе - те, кто достиг нужного уровня в нем не нуждаются... :D
Как делается веб-сервис, к которому можно присоединиться из интернета. можете посмотреть в руководствах по Делфи. С БД этот сервис работает точно так же, как любая программа. А клиент вызывает из сервиса функции по IP и имени сервиса. На Делфи и под винды я сам такое делал и это совсем не сложно. А на лазаре и под никсы - нет, тут вам надо искать самому.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: Клиент-серверное приложение

Сообщение yeger » 19.01.2016 00:11:47

ANTIKLAN писал(а):Есть ли у кого нибудь пошаговое руководство как сделать клиент и сервер для работы через интернет? Вообще непонятно как такое делать.

Прям не знаю как помочь то уже:
Сервер базы в роли серверной части: http://freepascal.ru/article/lazarus/20090416150500/
Клиент могущий выступать в роли сервера в пакете lnet в папке lnet\examples\visual\tcpudp, он простой, объектный, посмотрите код "main.pas"
CGI приложение: http://silvioprog.github.io/brookframework/
Аватара пользователя
yeger
новенький
 
Сообщения: 49
Зарегистрирован: 17.03.2011 12:26:34

Re: Клиент-серверное приложение

Сообщение v-t-l » 19.01.2016 00:48:51

ANTIKLAN писал(а):Нет. Это не подойдет. Вычисления должны производиться именно на сервере. Это основное требование. База это уже как сопутствующее, но не основное.

Похоже, человек слабо себе представляет "вычислительные" возможности современных серверов баз данных. Практически все они обладают мощными встроенными языками, а кроме того, некоторые, как Firebird или Postgresql, позволяют создавать и использовать расширенные средства на компилируемых языках.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Клиент-серверное приложение

Сообщение ENERGIX » 19.01.2016 10:02:01

Не пинайте меня сильно, внесу свои пять копеек. Года 3 назад приходилось писать подобное на Lazarus. Серверной части, как такой нет, использовался Firebird, по максимуму, сложного ничего нет собственно, алиас и настройка соединения. Клиентская часть на Zeos и Rx- компонентах, главное не забывать того, что не надо городить огород из кода, если это можно делать средствами базы данных, а она может многое.
Но, на работе, до меня, было писана программа и по сей день работающая прекрасно и главное просто (учет, первичка, отчеты, выписка). Сервер - IIS, на asp, но не net. Чистый html и вставка vbs, редко js. Работает с любой платформы и браузера. Главное то, что быстро править, что то добавить и не надо компилировать.
Работает с 2005 года, дописываем, добавляем функционал буквально на ходу.
ENERGIX
новенький
 
Сообщения: 18
Зарегистрирован: 01.03.2012 20:35:40

Re: Клиент-серверное приложение

Сообщение ANTIKLAN » 19.01.2016 11:24:15

Мне все равно не понятно. Можно по шагам на примере например библиотеки lnet расписать как добавить клиенту функции отправки данных на сервер и как на сервере их принять и обработав отправить назад. Чем проще будет схема тем лучше. И с подробными комментариями каждой строчки кода и команд. А то я так никогда не разберусь интернет ничего полезного не выдает все только в общих словах, а как на примеры посмотришь, то ни черта не понятно. :(
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Re: Клиент-серверное приложение

Сообщение yeger » 19.01.2016 12:16:44

ANTIKLAN писал(а):Мне все равно не понятно. Можно по шагам на примере например библиотеки lnet расписать как добавить клиенту функции отправки данных на сервер и как на сервере их принять и обработав отправить назад. Чем проще будет схема тем лучше. И с подробными комментариями каждой строчки кода и команд. А то я так никогда не разберусь интернет ничего полезного не выдает все только в общих словах, а как на примеры посмотришь, то ни черта не понятно. :(

1. Ставите пакет Lnet. (http://starworld.syt.ru/230/230.htm)
2. Копируете проект "lnet\examples\visual\tcpudp" (всю папку себе в другое место)
3. Открываете "testnet.lpi" из этой папки.
4. Открываете редактор форм, удаляете с формы компонент с именем SSL (замочек такой), потому что у вас не установлена Open SSL, я уверен.
5. Запускаете проект, при запуске лазарус ругается на строки 78 и 85, - комментируете их, они про удаленный SSL.
6. Запускаете проект, жмете [Host], это у вас сервер. Windows спросит разрешить ли этому серверу принимать/отправлять что то в сеть (а может и не спросит).
7. Запускаете "testnet.exe" не закрывая сервер, прямо из каталога проекта, жмете [Connect], это у вас клиент (можно несколько раз запустить для наглядности).
8. Пишете что то в строке клиента жмете [Send], сервер сообщение принимает, показывает и отправляет всем клиентам.

"как добавить клиенту функции отправки данных на сервер"
- в примере используется отправка данных вида "строка", читайте, вникайте как сделать какие-то свои методы. Но вообще можно отправить только данные по сети, а уж как они будут обрабатываться - это как программист напишет. Отправка на сервер будет Send, прием Receive.
"и как на сервере их принять"
- процедура получения сообщения "LTCPComponentReceive"
"и обработав отправить назад"
- вставте после строки "if aSocket.GetMessage(s) > 0 then begin" текст:
Код: Выделить всё
     if (s = 'HI') and FIsServer then begin
      aSocket.SendMessage('О, тебе тоже привет!');
      Exit;
    end;

перезапустите все, если с клиента отправите "HI", сервер ответит только 1 клиенту и ничего не скажет остальным.
Аватара пользователя
yeger
новенький
 
Сообщения: 49
Зарегистрирован: 17.03.2011 12:26:34

Re: Клиент-серверное приложение

Сообщение ANTIKLAN » 19.01.2016 13:21:16

yeger писал(а):
ANTIKLAN писал(а):Мне все равно не понятно. Можно по шагам на примере например библиотеки lnet расписать как добавить клиенту функции отправки данных на сервер и как на сервере их принять и обработав отправить назад. Чем проще будет схема тем лучше. И с подробными комментариями каждой строчки кода и команд. А то я так никогда не разберусь интернет ничего полезного не выдает все только в общих словах, а как на примеры посмотришь, то ни черта не понятно. :(

1. Ставите пакет Lnet. (http://starworld.syt.ru/230/230.htm)
2. Копируете проект "lnetexamplesvisualtcpudp" (всю папку себе в другое место)
3. Открываете "testnet.lpi" из этой папки.
4. Открываете редактор форм, удаляете с формы компонент с именем SSL (замочек такой), потому что у вас не установлена Open SSL, я уверен.
5. Запускаете проект, при запуске лазарус ругается на строки 78 и 85, - комментируете их, они про удаленный SSL.
6. Запускаете проект, жмете [Host], это у вас сервер. Windows спросит разрешить ли этому серверу принимать/отправлять что то в сеть (а может и не спросит).
7. Запускаете "testnet.exe" не закрывая сервер, прямо из каталога проекта, жмете [Connect], это у вас клиент (можно несколько раз запустить для наглядности).
8. Пишете что то в строке клиента жмете [Send], сервер сообщение принимает, показывает и отправляет всем клиентам.

"как добавить клиенту функции отправки данных на сервер"
- в примере используется отправка данных вида "строка", читайте, вникайте как сделать какие-то свои методы. Но вообще можно отправить только данные по сети, а уж как они будут обрабатываться - это как программист напишет. Отправка на сервер будет Send, прием Receive.
"и как на сервере их принять"
- процедура получения сообщения "LTCPComponentReceive"
"и обработав отправить назад"
- вставте после строки "if aSocket.GetMessage(s) > 0 then begin" текст:
Код: Выделить всё
     if (s = 'HI') and FIsServer then begin
      aSocket.SendMessage('О, тебе тоже привет!');
      Exit;
    end;

перезапустите все, если с клиента отправите "HI", сервер ответит только 1 клиенту и ничего не скажет остальным.

Сижу. Вникаю. :roll:

Добавлено спустя 51 минуту 21 секунду:
Как перевести на человеческий язык вот такие условия:

if FNet.Connect(EditIP.Text, StrToInt(EditPort.Text)) then

if FNet.Listen(StrToInt(EditPort.Text)) then

if aSocket.GetMessage(s) > 0 then

if FNet is TLUdp then

if FIsServer then
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Re: Клиент-серверное приложение

Сообщение pupsik » 19.01.2016 16:03:31

Как перевести на человеческий язык вот такие условия:
:mrgreen:
Вы веткой не ошиблись?
Может надо было в: "Помощь за вознаграждение"???
Что то мне говорит что вы взялись за деяние не совместимое с вашими знаниями.

п.с.
Приблизительный перевод:
if FNet.Connect(EditIP.Text, StrToInt(EditPort.Text)) then Может законектимся...

if FNet.Listen(StrToInt(EditPort.Text)) then не...е: давайте послушаем порт

if aSocket.GetMessage(s) > 0 then О..о че то пришло

хм... дальнейшие условия согласно .... (фантазия кончилась)
if FNet is TLUdp then

if FIsServer then

п.с. п.с.
За лояльность и понятливость перевода не ручаюсь т.к. полного кода не видел :lol:
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Клиент-серверное приложение

Сообщение ANTIKLAN » 19.01.2016 16:09:54

pupsik писал(а):
Как перевести на человеческий язык вот такие условия:
:mrgreen:
Вы веткой не ошиблись?
Может надо было в: "Помощь за вознаграждение"???
Что то мне говорит что вы взялись за деяние не совместимое с вашими знаниями.

п.с.
Приблизительный перевод:
if FNet.Connect(EditIP.Text, StrToInt(EditPort.Text)) then Может законектимся...

if FNet.Listen(StrToInt(EditPort.Text)) then не...е: давайте послушаем порт

if aSocket.GetMessage(s) > 0 then О..о че то пришло

хм... дальнейшие условия согласно .... (фантазия кончилась)
if FNet is TLUdp then

if FIsServer then

п.с. п.с.
За лояльность и понятливость перевода не ручаюсь т.к. полного кода не видел :lol:

Так не пойдет нужен более четкий перевод. А про знания вы зря. Как еще развиваться если не на практике. Теория это все так для начала. Толку что я теорию изучил на практике то совсем другое.
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Re: Клиент-серверное приложение

Сообщение pupsik » 19.01.2016 16:46:47

Так не пойдет нужен более четкий перевод.
почти упал со стула :)
А про знания вы зря.
Неужто это не заказ?

п.с.
Сколько в Интернете исходников, сколько примеров в компонентах, лазаре... Книг написали уйму. И вопрос:
Как перевести на человеческий язык вот такие условия:
....
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 226

Рейтинг@Mail.ru