@e_danilchenko

Как построить приложение клиент-серверной архитекутры?

Друзья, вопрос вот в чем: хотелось-бы создать приложение (ну а точнее перепроектировать существующее) так, что-бы логика приложения выполнялась на сервере, а у клиента было приложение, посредством которого он обменивается с сервером информацией. Опыта в этом никакого нет, разрабатывал только локальные настольные приложения. Да чего уж там опыта, даже представление о подобной архитектуре имею смутное, созданное в моем подсознании из обрывочных сведений самого разного уровня абстракций. Хотелось-бы узнать: каким образом построена связь приложения с сервером? Нужно ли регистрировать домен, аки у сайтов или можно просто обращаться к серверу по заданному в приложении адресу (опять же каким образом?). Отсюда вытекающий вопрос - обязательно ли нужно для этого дополнительное оборудование? Достоинства, недостатки этого подхода, возможные проблемы. Буду очень признателен.
  • Вопрос задан
  • 1253 просмотра
Решения вопроса 1
MarcusAurelius
@MarcusAurelius
автор Impress Application Server для Node.js
Клиент может быть как браузерное, так и оконное приложение (например на C#, Java, но это уже редко используется, разве что в тех случаях, когда клиентское приложение должно локально взаимодействовать с API операционной системы или оборудованием и должно выводить такую графику, как браузерное приложение не может, например в некоторых играх, где нужно плотно работать с видеокартой, а из браузера ее не достать), а браузерное приложение - тут уж в любом случае JavaScript. Если оконное, то хватит и IP для связи (пишем IP и порт в конфиг), а браузерное - гораздо удобнее его открывать через доменное имя будет. Между клиентом и сервером Вам нужно будет обмениваться данными, для этого нужно выбрать: протокол и формат сериализации. Независимо от того, будет ли клиент браузерный или оконный протокол лучше всего брать HTTP (его можно проксировать и масштабировать, к такому API потом проще будет обращаться из других приложений, когда понадобиться развитие системы). Но обычный HTTP это односторонний поток запросов от клиента к серверу, а может оказаться, что для задачи нужно и обратный поток, от сервера к клиенту, например, чтобы передавать события, которые происходят на сервере, если их вызвали другие пользователи или серверные задачи. Для трансляции событий нужен протокол с установлением соединения, т.е. такой, где связь поддерживается долгое время и сервер может прислать сообщение без запроса, т.е. чтобы клиенту не довелось каждые 2 секунды переспрашивать сервер, нет ли уже каких-то данных. Для этого подойдет SSE (Server-Sent Events) это расширение HTTP протокола, но он односторонний, от сервера к клиенту, а клиент все свои запросы отдельно должен присылать, делая HTTP GET/POST запросы. Можно так же использовать WebSocket, он двусторонний, и через него можно устроить обмен данными в обе стороны, но SSE гораздо проще в реализации и я советую именно его. Теперь нужно организовать API на сервере, я для этого советую Node.js, это мой выбор, а причины я поясняю тут habrahabr.ru/post/204958 Ну и выбрать СУБД, из реляционок рекомендую PostgreSQL www.postgresql.org а из объектных (документных) MongoDB https://www.mongodb.org/ Ну и если все компоненты подходят, то вот мой сервер приложений, в котором я уже все это собрал habrahabr.ru/post/247543
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
Клиент и сервер общаются каким угодно способом. Можно и через почту связь наладить, и через другие протоколы, не ip.

Если вам нужно, чтобы сервер и клиент связывались через интернет, как в сайтах, достаточно будет связи по IP адресу и порту.
Почитайте про API и его реализацию для веб-технологий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы