Сервер будет иметь три цели:
- действовать как привратник и убедиться, что клиенты действуют разумно;
- выполнять любую обработку, которую вы не доверяете клиентам; и
- чтобы обеспечить своего рода центр - централизованное место, где хранятся соответствующие данные, и где клиенты могут встречаться, чтобы общаться друг с другом в случае необходимости.
Если клиенты делают все самостоятельно и не нуждаются в непосредственном общении друг с другом, то вам действительно не нужен сервер приложений. Но чем больше у вас пользователей, тем больше им нужно будет координировать свои действия друг с другом. После определенного момента, связанного с конкретным приложением, риск того, что клиенты попрут друг друга, перевешивает большинство преимуществ децентрализованной модели. На этом этапе наличие сервера в миксе имеет больше смысла.
Если вам нужен пример, возьмите Microsoft Access. Вероятно, мы можем согласиться с тем, что это приложение базы данных с толстым клиентом. Он изменяет базу данных более или менее напрямую (в любом случае, в случае баз данных Jet / ACE) и может совместно использовать базу данных с другими процессами. Но из-за того, что слишком много пользователей, в частности, получают доступ к файлу общей базы данных по сети, коррупция практически неизбежна. Однако если вы внедрите SQL Server для обработки базы данных и позволите Access выполнять работу пользовательского интерфейса и генерировать запросы и т. Д., Вы получите большинство из тех же преимуществ с гораздо меньшим риском разрушения базы данных.
Что касается того, является ли автономный сервер лучше или хуже, чем веб-приложение в Tomcat или что-то подобное: приложение в одном из этих контейнеров имеет те же преимущества, что и веб-приложение, работающее в Tomcat, по сравнению с автономным веб-приложением на Java. ... вам не нужно беспокоиться о деталях низкого уровня. Вы имеете дело с запросами и ответами, а не с сокетами и пакетами. Кроме того, использование известного и стандартного протокола, такого как HTTP, упрощает для других программ (включая новые версии вашего собственного программного обеспечения) связь с вами. В свою очередь, однако, вы должны согласовать коммуникации вашего приложения с тем, как работает ваш конкретный контейнер. Можете ли вы сделать это, зависит только от вас.