На соседнем FPC форуме есть одноименная тема с примером работы клиент-сервера.
https://forum.lazarus.freepascal.org/in ... 677.0.html
Поскольку для меня это новая задачка, пример стал весьма полезным. Но при детальном изучении стал утыкаться в графическую ориентированность и странную реализацию основного для примера модуля.
1) Все ориентировано на GUI. Не о каком запуске в качестве сервиса и речи быть не может в изначальном варианте. Админка и есть само приложение сервера.
2) Автор жестко связал клиент и сервер на уровне классов, это жесть.
3) Все переменные и объявления организованы так, что при попытке разделения классов придется много чего перестраивать, выводить новые свойства. Иначе при разделении клиента и сервера на разные юниты важные переменные станут не доступными.
Теперь то что я не понимаю:
1) Список пользователей он хранит обычным TStringList, а список потоков этих же соединений - ThreadList. Где логика?
2) Наверно пока самый главный вопрос для меня, где нужно мнение тех кто опыт имел создания клиент-сервер. Что за фигня? Запущен сервер, каждое соединение создает свой отдельный поток. Но чуть что, обработка событий, даже проверка логина/пароля все через синхронизацию перенаправляется в основной поток приложения. Может я что то не понимаю, но это повышение шанса уронить сервер на мой взгляд. Плюс замедление выполнения операций при скоплении подключенных клиентов. По хорошему же надо обработку сообщений отправить в потоки?
3) Третье вытекает из второго, при расширении. Если цеплять SQL соединение, то что лучше инициировать соединение на каждом запросе от клиента или держать соединение открыты для потока клиента в принципе?