Могут ли клиентская и серверная части приложения работать на одном и том же компьютере
Современные компьютерные вычислительные и локальные сети имеют либо одноранговую (когда все узлы связаны напрямую и равноправны), либо иерархическую структуру, одним из видов которой является клиент-серверная архитектура. Представление об организации такой модели основано на понимании, чем отличается клиент от сервера, и разделении ресурсов.
Сервер – компьютер, обслуживающий другие компьютеры в сети и предоставляющий им свои ресурсы для решения определенных задач.
Клиент – компьютер, использующий ресурсы сервера и предоставляющий пользователю возможность взаимодействия с системой и сетью.
Эта же схема используется при организации сетевых приложений, только в роли основных узлов выступают серверная и клиентская части софта.
Серверы и клиенты
омпьютеры, подключенные к Интернету, бывают двух типов: серверы и клиенты. Те компьютеры, которые предоставляют определенный сервис другим компьютерам, называют серверами 1 , а те, которые его получают, – клиентами. Более корректно говорить о клиентах и серверах на уровне программного обеспечения. Вычисления, при которых одна программа выступает как клиент, а другая как сервер, называются клиент-серверными вычислениями. Архитектура «клиент-сервер» является основой распределенных вычислений.
Следует различать компьютер-сервер и программу-сервер. Например, на одном и том же компьютере могут быть установлены как клиентские, так и серверные программы, то есть компьютер в различных процессах может одновременно выступать и клиентом, и сервером (рис. 1).
Разделение программ на клиентскую и серверную части позволяет расположить эти программы на одном компьютере либо на машинах, расположенных в любых местах, связанных по Сети (рис. 2).
Клиентский компьютер, подключенный к Интернету, может обращаться к огромному количеству серверов во всем мире. Сеpвеpом может быть любой компьютер, который подключен к Сети и на котором запущены соответствующие программы, предоставляющие сервисные сетевые услуги.
Обычно компьютеры, которые выполняют роль серверов, и клиентские компьютеры различаются не только запускаемыми сервисами, но и операционными системами и аппаратной частью. Компьютеры-серверы – это, как правило, многопроцессорные системы, а так же могут представлять собой кластеры из однотипных серверов, которые делят между собой нагрузку, связанную с потреблением клиентами предоставляемых ими сервисов.
Следует отметить, что на одном компьютере может быть запущено несколько разных программ-серверов, вследствие чего этот компьютер может предоставлять несколько сервисов. Например, на машине может быть установлено программное обеспечение, которое позволяет ей работать одновременно и Web-сервером, и FTP-сервером. Для каждого типа программ-серверов существует своя программа-клиент. Так, Web-браузер обращается к Web-серверу, FTP-клиент – к FTP-серверу и т.д. Поскольку клиент может обратиться к серверу в любое время, сервер обычно работает постоянно, и очень важно, чтобы он длительное время работал без сбоев. Программа-клиент формирует запрос и отправляет его в заданном направлении по Сети, получает ответ и преобразует его в понятный для пользователя вид.
Настольное прило жение (desktop application)
Работает на пользовательском компьютере, причём такому приложению для работы обычно не нужен доступ в сеть. Примером такого приложения может служить любой текстовый или графический редактор, многие игры.
Для создания настольных приложений можно использовать такие технологии:
Почему веб-мастеру нужно понимать модель взаимодействия клиент-сервер
Давайте теперь ответим на вопрос: «зачем веб-мастеру или веб-разработчику понимать концепцию взаимодействия клиент-сервер?». Ответ, естественно, очевиден. Чтобы что-то делать своими руками нужно понимать, как это работает. Чтобы сделать сайт и, чтобы он правильно работал в сети Интернет или хотя бы просто работал, нам нужно понимать, как работает сеть Интернет.
Мы уже упоминали, что большая часть сетевых протоколов имеют архитектуру клиент-сервер. Например, веб-мастеру или веб-разработчику будут интересны протоколы седьмого и шестого уровня эталонной модели. Сетевым администраторам важно понимать, как происходит взаимодействие на уровнях с пятого по второй. Для инженеров связи наибольший интерес представляют протоколы с четвертого по первый уровень модели OSI.
Поэтому если вы действительно хотите быть профессионалом в сфере web, то сперва вам необходимо понимать, как происходит взаимодействии в сети (именно на седьмом уровне), а уже потом начинать изучать инструменты, которые позволят создавать сайты.
Могут ли клиент и сервер располагаться на одном компьютере
Мы никогда не размещали навязчивую рекламу и не просили вас кликать по баннерам. Вашей посильной помощью сайту может быть отсутствие блокировки рекламы.
Постановка задачи
Нам совершенно не обязательно в продуктиве иметь интегрированный клиент-сервер. Напротив, такое решение было бы крайне вредным со всех точек зрения. Задача состоит в том, что бы в процессе разработки у нас была единая кодовая база для моделей данных для бэкенда и фронтенда, но на выходе получались бы независимые клиент и сервер. В этом случае мы получим все преимущества стандартного подхода и приобретем удобства в разработке и поддержке проекта, перечисленные выше.
Концепция взаимодействия клиент-сервер
Также стоит заметить, что в основе взаимодействия клиент-сервер лежит принцип того, что такое взаимодействие начинает клиент, сервер лишь отвечает клиенту и сообщает о том может ли он предоставить услугу клиенту и если может, то на каких условиях. Клиентское программное обеспечение и серверное программное обеспечение обычно установлено на разных машинах, но также они могут работать и на одном компьютере.
Данная концепция взаимодействия была разработана в первую очередь для того, чтобы разделить нагрузку между участниками процесса обмена информацией, а также для того, чтобы разделить программный код поставщика и заказчика. Ниже вы можете увидеть упрощенную схему взаимодействия клиент-сервер.
Простая схема взаимодействия клиент-сервер
Мы видим, что к одному серверу может обращаться сразу несколько клиентов (действительно, на одном сайте может находиться несколько посетителей). Также стоит заметить, что количество клиентов, которые могут одновременно взаимодействовать с сервером зависит от мощности сервера и от того, что хочет получить клиент от сервера.
Многие сетевые протоколы построены на архитектуре клиент-сервер, поэтому в их основе обычно лежат одинаковые или схожие принципы взаимодействия, а разницу мы видим лишь в деталях, которые обусловлены особенностями и спецификой области, для которой разрабатывался тот или иной сетевой протокол.
Серверное приложение
Серверное приложение – это специализированная программа, которая принимает запросы клиентов, обрабатывает их и дает ответы на эти вопросы. Для того чтобы лучше понять, что такое серверное приложение, вам нужно понимать, что модель взаимодействия клиент-сервер предназначена для того, чтобы разделить нагрузку и функционал между клиентскими приложениями и серверными, поэтому приложение клиент и серверное приложение могут работать на одном компьютере и при этом взаимодействовать друг с другом.
В качестве примеров серверных приложений можно привести:
А, например, серверное приложение MySQL должно анализировать SQL запрос, полученный от клиента, обработать его, организовать доступ к файловой системе и вернуть результат запроса клиенту.
Преимущества и недостатки архитектуры клиент-сервер
Преимуществом модели взаимодействия клиент-сервер является то, что программный код клиентского приложения и серверного разделен. Если мы говорим про локальные компьютерные сети, то к преимуществам архитектуры клиент-сервер можно отнести пониженные требования к машинам клиентов, так как большая часть вычислительных операций будет производиться на сервере, а также архитектура клиент-сервер довольно гибкая и позволяет администратору сделать локальную сеть более защищенной.
К недостаткам модели взаимодействия клиент-сервер можно отнести то, что стоимость серверного оборудования значительно выше клиентского. Сервер должен обслуживать специально обученный и подготовленный человек. Если в локальной сети ложится сервер, то и клиенты не смогут работать (в качестве частного случая можно привести пример: мощности сервера не всегда хватает, чтобы удовлетворит запросы клиентов, если вы хоть раз работали с биллинговыми системами, то понимаете о чем я: время ожидания ответа от сервера может быть очень большим).
В качестве заключения нам стоит явно акцентировать внимание на том, что архитектура клиент-сервер не делит машины на только клиент или только сервер, а скорее позволяет распределить нагрузку и разделить функционал между клиентской частью и серверной.
Решение
Уже довольно давно экспериментирую с интеграцией клиента и сервера в одном файле. Основной проблемой до недавнего времени было то, что в стандартном JS подключение сторонних модулей на клиенте и сервере происходило слишком по-разному: require(. ) в node.js, на клиенте всякая AJAX-магия. Все поменялось с появлением ES-модулей. В современных браузерах «import» поддерживается уже давно. Node.js немного отстает в этом плане и ES-модули поддерживаются только с включенным флагом "--experimental-modules". Есть надежда, что в обозримом будущем модули заработают «из коробки» и в node.js. Кроме того, вряд ли что-то сильно поменяется, т.к. в браузерах эта функциональность уже давно работает по-умолчанию. Думаю, уже сейчас можно использовать ES-модули не только на клиентской но и на серверной стороне (если у вас есть контр-аргументы на этот счет, напишите в комментариях).
Схема решения выглядит так:
Проект содержит три основных каталога:
protected — бэкенд;
public — фронтенд;
shared — общие клиент-серверные модели.
Отдельный процесс-наблюдатель (observer) следит за файлами в каталоге shared и при любых изменениях создает версии измененного файла отдельно для клиента и отдельно для сервера (в каталогах protected/shared и public/shared).
Что такое сервер? Серверный компьютер и серверное приложение
Что такое сервер? Серверный компьютер и серверное приложение
Мобильные приложения
Мобильными обычно называют те приложения, которые работают на сотовых телефонах и коммуникаторах. К ним относятся приложения для iPhone и Android. В таких устройствах, как правило, связь с Интернет всегда имеется, поэтому многие мобильные приложения являются клиентской частью для некоторого веб-приложения. Для разработки мобильных приложений, в зависимости от устройства, на котором будет работать это приложение, используются такие технологии:
Сервер рассылки – программный компонент, обеспечивающий формирование и поддержку списков рассылки.
Се́рверное програ́ммное обеспечение - ( се́рвер , англ. server от to serve — служить; множественное число се́рверы, в разговорном языке также употребляется сервера́) — в информационных технологиях — программный компонент вычислительной системы, выполняющий сервисные (обслуживающие) функции по запросу клиента , предоставляя ему доступ к определённым ресурсам или услугам.
Наличие на компьютере почтового клиента не означает, что пользователь сможет работать с электронной почтой - необходимо также иметь хотя бы один почтовый ящик.
Очевидно, что почтовый клиент должен быть настроен на работу с почтовым ящиком. Для этого клиентское программное обеспечение должно располагать определенной информацией:
- адресом (IP-адресом или доменным именем) сервера входящей почты, на котором расположен почтовый ящик и данными о том, по какому протоколу осуществляется связь с ним;
- адресом сервера исходящей почты;
- именем почтового ящика;
- данными о параметрах, управляющих доступом к почтовому ящику (например, учетным именем пользователя, паролем и т.д.).
Одной из главных концепций WWW является концепция "универсальной читаемости" (Universal readership), т.е. обеспечение возможности получения доступа и организации работы с информационными объектами различных типов с помощью с помощью одной клиентской программы. Именно поэтому с самого начала на клиентское программное обеспечения накладывалось требование универсальности, как с точки зрения представления пользователю различных информационных объектов (Web-документов, тестовых файлов, графических файлов и т.п.), так и с точки зрения обеспечения доступа к различным серверам по различным протоколам (например, к FTP-серверам).
Естественно, что с момента появления сам по себе сервис WWW постоянно развивается, и, следовательно, меняется состав функций, которые должны выполнять Web-клиенты.
Функции современных Web-клиентов можно разделить на две группы: стандартные функции, которые поддерживаются всеми клиентами и обеспечивают основные механизмы работы с WWW, и дополнительные, которые в принципе являются не обязательными и поддерживаются всеми развитыми клиентами для повышения удобства работы пользователей.
Стандартные функции Web-клиентов
Стандартные функции Web-клиентов обеспечивают возможность использования WWW как интегрирующего сервиса (см. раздел "Основные концепции").
Архитектура «клиент-сервер»
Архитектура клиент-сервер определяет лишь общие принципы взаимодействия между компьютерами, детали взаимодействия определяют различные протоколы. Данная концепция нам говорит, что нужно разделять машины в сети на клиентские, которым всегда что-то надо и на серверные, которые дают то, что надо. При этом взаимодействие всегда начинает клиент, а правила, по которым происходит взаимодействие описывает протокол.
Существует два вида архитектуры взаимодействия клиент-сервер: первый получил название двухзвенная архитектура клиент-серверного взаимодействия, второй – многоуровневая архитектура клиент-сервер (иногда его называют трехуровневая архитектура или трехзвенная архитектура, но это частный случай).
Принцип работы двухуровневой архитектуры взаимодействия клиент-сервер заключается в том, что обработка запроса происходит на одной машине без использования сторонних ресурсов. Двухзвенная архитектура предъявляет жесткие требования к производительности сервера, но в тоже время является очень надежной. Двухуровневую модель взаимодействия клиент-сервер вы можете увидеть на рисунке ниже.
Двухуровневая модель взаимодействия клиент-сервер
Здесь четко видно, что есть клиент (1-ый уровень), который позволяет человеку сделать запрос, и есть сервер, который обрабатывает запрос клиента.
Если говорить про многоуровневую архитектуру взаимодействия клиент-сервер, то в качестве примера можно привести любую современную СУБД (за исключением, наверное, библиотеки SQLite, которая в принципе не использует концепцию клиент-сервер). Суть многоуровневой архитектуры заключается в том, что запрос клиента обрабатывается сразу несколькими серверами. Такой подход позволяет значительно снизить нагрузку на сервер из-за того, что происходит распределение операций, но в то же самое время данный подход не такой надежный, как двухзвенная архитектура. На рисунке ниже вы можете увидеть пример многоуровневой архитектуры клиент-сервер.
Многоуровневая архитектура взаимодействия клиент-сервер
Типичный пример трехуровневой модели клиент-сервер. Если говорить в контексте систем управления базами данных, то первый уровень – это клиент, который позволяет нам писать различные SQL запросы к базе данных. Второй уровень – это движок СУБД, который интерпретирует запросы и реализует взаимодействие между клиентом и файловой системой, а третий уровень – это хранилище данных.
Если мы посмотрим на данную архитектуру с позиции сайта. То первый уровень можно считать браузером, с помощью которого посетитель заходит на сайт, второй уровень – это связка Apache + PHP, а третий уровень – это база данных. Если уж говорить совсем просто, то PHP больше ничего и не делает, кроме как, гоняет строки и базы данных на экран и обратно в базу данных.
О модели взаимодействия клиент-сервер простыми словами. Архитектура «клиент-сервер» с примерами
Модель взаимодействия клиент-сервер. Архитектура «клиент-сервер».
Итак, небольшая аннотация к записи: сначала мы разберемся с концепцией взаимодействия клиент сервер. Затем поговорим о том зачем вообще веб-мастеру нужно понимать модель клиент-сервер. Далее мы посмотрим на архитектуру приложений, которые работают по принципу клиент-сервер и в завершении рассмотрим преимущества и недостатки данной модели.
Могут ли клиент и сервер располагаться на одном компьютере
Клиент-серверные локальные сети применяются в тех случаях, когда в сеть должно быть объединено много пользователей и возможностей одноранговой сети может не хватить. Тогда в сеть включается специализированный компьютер – сервер.
Сервером называется абонент сети, который предоставляет свои ресурсы другим абонентам, но сам не использует ресурсы других абонентов, то есть служит только сети. Выделенный сервер — это сервер, занимающийся только сетевыми задачами. Невыделенный сервер может заниматься помимо обслуживания сети и другими задачами. Специфический тип сервера — это сетевой принтер.
Серверы специально оптимизированы для быстрой обработки сетевых запросов на разделяемые ресурсы и для управления защитой файлов и каталогов. При больших размерах сети мощности одного сервера может оказаться недостаточно, и тогда в сеть включают несколько серверов. Серверы могут выполнять и некоторые другие задачи: сетевая печать, выход в глобальную сеть, связь с другой локальной сетью, обслуживание электронной почты и т.д.
Количество пользователей сети на основе сервера может достигать нескольких тысяч. Одноранговой сетью такого размера просто невозможно было бы управлять. Кроме того, в сети на основе серверов можно легко менять количество подключаемых компьютеров, такие сети называются масштабируемыми.
На сервере устанавливается специальная сетевая операционная система, рассчитанная на работу сервера. Эта сетевая ОС оптимизирована для эффективного выполнения специфических операций по организации сетевого обмена. На рабочих станциях (клиентах) может устанавливаться любая совместимая операционная система, поддерживающая сеть.
- Решения компании Microsoft: Windows NT/2000/2003 Server;
- Решения на базе Linux: SuSE Linux, Red Hat Linux и т.п.
- Решения на базе Unix: Solaris, HP-UX, AIX, FreeBSD, и т.п.
- Решения компании Novell: NetWare 5.1/6.0/6.5
Клиентом называется абонент сети, который только использует сетевые ресурсы, но сам свои ресурсы в сеть не отдает, то есть сеть его обслуживает. Компьютер-клиент также часто называют рабочей станцией. В принципе каждый компьютер может быть одновременно как клиентом, так и сервером. Под сервером и клиентом часто понимают также не сами компьютеры, а работающие на них программные приложения. В этом случае то приложение, которое только отдает ресурс в сеть, является сервером, а то приложение, которое только пользуется сетевыми ресурсами, является клиентом.
Достоинством сети на основе сервера часто называют надежность. Это верно, но только с одной оговоркой: если сервер действительно очень надежен. В противном случае любой отказ сервера приводит к полному параличу сети в отличие от ситуации с одноранговой сетью, где отказ одного из компьютеров не приводит к отказу всей сети.
Бесспорное достоинство сети на основе сервера – высокая скорость обмена, так как сервер всегда оснащается быстрым процессором (или даже несколькими процессорами), оперативной памятью большого объема и быстрыми жесткими дисками. Так как все ресурсы сети собраны в одном месте, возможно применение гораздо более мощных средств управления доступом, защиты данных, протоколирования обмена, чем в одноранговых сетях.
Для обеспечения надежной работы сети при авариях электропитания применяется бесперебойное электропитание сервера. В данном случае это гораздо проще, чем при одноранговой сети, где желательно оснащать источниками бесперебойного питания все компьютеры сети.
К недостаткам сети на основе сервера относятся ее громоздкость в случае небольшого количества компьютеров, зависимость всех компьютеров-клиентов от сервера, более высокая стоимость сети вследствие использования дорогого сервера.
Для администрирования сети (то есть управления распределением ресурсов, контроля прав доступа, защиты данных, файловой системы, резервирования файлов и т.д.) в случае сети на основе сервера необходимо выделять специального человека, имеющего соответствующую квалификацию. Централизованное администрирование облегчает обслуживание сети и позволяет оперативно решать все вопросы. Особенно это важно для надежной защиты данных от несанкционированного доступа. В случае же одноранговой сети можно обойтись и без специалиста-администратора, правда, при этом все пользователи сети должны иметь хоть какое-то представление об администрировании.
Любой клиент-серверный проект подразумевает четкое разделение кодовой базы на 2 части (иногда больше) — клиентскую и серверную. Зачастую, каждая такая часть оформляется в виде отдельного независимого проекта, поддерживаемого своей командой девелоперов.
В этой статье я предлагаю критически посмотреть на стандартное жесткое разделение кода на бэкенд и фронтенд. И рассмотрим альтернативу, где в коде нет четкой грани между клиентом и сервером.
Минусы стандартного подхода
Таким образом, что бы проследить весь путь информации от формы в браузере до базы данных на сервере нам придется копаться в двух разноплановых системах. Если в команде разделены роли и за бэкенд и фронтенд отвечают разные специалисты, возникают дополнительные организационные проблемы связанные с их синхронизацией.
Общее определение термина сервер
Итак, давайте разберемся с вопросом: что такое сервер? Но для начала немного исторической справки. Сервер – это имя. Перевод имени Сервер с персидского – глава, предводитель, вождь. Собственно, нам такое определение подходит для дальнейшего разговора. Если говорить конкретно про компьютерную тематику и отрасль IT, то термин сервер имеет два значения:
- Сервер – программное обеспечение, принимающее и обрабатывающее запросы клиентов с целью оказания тех или иных услуг.
- Сервер – это аппаратный комплекс, имеющий большие вычислительные мощности. Обычно сервер собирают под какие-либо конкретные сервисные функции. Например, сервер баз данных или файловый сервер.
Если говорить в контексте веб-разработки, то хостинг, на котором мы размещаем сайты – это сервер, который включает в себя как программную часть, так и аппаратную часть.
Давайте помечтаем
Предположим, что мы можем описать весь путь данных от формы на клиенте до базы на сервере в одной модели. В коде это может выглядеть примерно так (код не рабочий):
Таким образом, вся бизнес-логика модели у нас перед глазами. Поддерживать такой код проще. Вот плюсы, которые может принести совмещение клиент-серверных методов в одной модели:
- Бизнес-логика сконцентрирована в одном месте, нет необходимости разделять ее между клиентом и сервером.
- Можно легко переносить функциональность от сервера к клиенту или от клиента к серверу в процессе развития проекта.
- Нет необходимости дублировать одинаковые методы для бэкенда и фронтенда.
- Единый набор тестов для всей бизнес-логики проекта.
- Замена горизонтальных линий разграничения ответственности в проекте на вертикальные.
Вася отвечает за фронтенд, Федя — за бэкенд. Линия разграничения ответственности проходит горизонтально. Эта схема имеет недостатки любой вертикальной структуры — она сложно масштабируется и имеет низкую отказоустойчивость. Если проект расширяется вам придется делать довольно сложный выбор: кого усилить Васю или Федю? Или если заболел или уволился Федя, Вася не сможет его заменить.
Предлагаемый здесь подход позволяет развернуть линию разграничения ответственности на 90 градусов и превратить вертикальную архитектуру в горизонтальную.
Такая архитектура гораздо проще масштабируется и более отказоустойчивая т.к. Вася и Федя становятся взаимозаменяемыми.
В теории выглядит неплохо, попробуем реализовать все это на практике, не растеряв по дороге все то, что дает нам раздельное существование клиента и сервера.
Веб-приложение (web application)
Веб приложение состоит как минимум из двух частей: одна часть (серверная) работает на сервере в Сети, а другая (клиентская) - на компьютере пользователя, в браузере. В браузере отображается графический интерфейс приложения: кнопки, картинки, и так далее, а сервер занимается обработкой з апросов клиентской части. Примеры веб приложения - это любой веб-сайт. В зависимости от сложности, сайт может представлять собой как простой набор статических HTML файло в, так и программный продукт, например Drupal, "ВКонтакте", или Wordpress, серверная часть которых состоит из тысяч строк программного кода. Социальные сети, чаты - это всё веб-приложения. Поскольку у клиентской и серверной частей веб-приложения совершенн о разные задачи и возможности, на них используются различные технологии.
Реализация
Рассмотрим пример простенького real-time мессенджера. Нам понадобится свежий node.js (у меня версия 11.0.0) и Redis (их установка тут не рассматривается).
Установим и запустим процесс-наблюдатель (observer на схеме):
Если все в порядке, наблюдатель запустит веб-сервер и начнет мониторить изменения файлов в каталогах shared и protected. При изменениях в shared создаются соответствующие версии моделей данных для клиента и для сервера. При изменениях в protected наблюдатель автоматически перезапустит веб-сервер.
Посмотреть работоспособность мессенджера можно в браузере перейдя по ссылке
(token и user произвольные). Для эмуляции нескольких пользователей откройте эту же страницу в другом браузере указав другие token и user.
Теперь немного кода.
Веб-сервер
Это обычный express-сервер, здесь нет ничего интересного. Расширение «mjs» нужно для ES-модулей в node.js. Для единообразия, будем использовать это расширение и для клиента.
Клиент
Для примера я использую на клиенте Vue, но сути это не меняет. Вместо Vue может быть что угодно, где можно выделить модель данных в отдельный класс (knockout, angular).
Модель данных
В первой строке в пути используется подстановка &root. При генерации клиентской и серверной версий &root будет заменен на относительный путь к каталогам public и protected соответственно.
Еще важный момент: из клиентского метода можно вызвать только тот серверный метод, название которого начинается с "$":
Это сделано по соображениям безопасности: извне можно обратиться только к специально-предназначенным для этого методам.
Давайте посмотрим на версии моделей данных которые наблюдатель (observer) сгенерировал для клиента и сервера.
Клиент (public/shared/messages/model/dataModel.mjs)
На клиентской стороне модель является потомком класса Vue (через Base.mjs). Таким образом, вы можете работать с ней как с обычной моделью данных Vue. Наблюдатель добавил в клиентскую версию модели метод __getFilePath__ который возвращает путь к файлу класса и заменил код серверного метода $sendMessage на конструкцию, которая, по-сути, через механизм rpc вызовет нужный нам метод на сервере (__runSharedFunction определен в родительском классе).
Сервер (protected/shared/messages/model/dataModel.mjs)
Взаимодействие клиента и сервера
Когда нам нужно вызвать на клиенте какой-то серверный метод, просто делаем это.
Если вызов в рамках одной модели, тут все просто:
Можно «дернуть» другую модель:
В обратную сторону, т.е. позвать на сервере какой-нибудь клиентский метод, не работает. Технически это реализуемо, но с практической точки зрения лишено смысла, т.к. сервер один, а клиентов много. Если нам нужно на сервере инициировать какие-то действия на клиенте используем событийный механизм:
Метод fireEvent принимает 3 параметра: название события, кому оно адресовано и данные. Адресата можно задать несколькими способами: ключевое слово «all» — событие будет разослано всем пользователям или в массиве перечислить токены сессии тех клиентов, которым адресуется событие.
Событие не привязано к конкретному инстансу класса модели данных и сработают обработчики во всех экземплярах класса, в котором был вызван fireEvent.
Горизонтальное масштабирование бэкенда
Монолитность клиент-серверных моделей в предлагаемой реализации, на первый взгляд, должна накладывать существенные ограничения на возможности горизонтального масштабирования серверной части. Но это не так: технически сервер не зависит от клиента. Вы можете скопировать каталог «public» куда угодно и отдавать его содержимое через любой другой веб-сервер (nginx, apache и т.д.).
Серверную часть можно легко расширять запуская новые экземпляры бэкенда. Для взаимодействия отдельных экземпляров используется Redis и система очередей Kue.
API и разные клиенты к одному бэкенду
В реальных проектах одним серверным API могут пользоваться разноплановые клиенты — веб-сайты, мобильные приложения, сторонние сервисы. В предложенном решении все это доступно без каких либо дополнительных танцев. Под капотом вызова серверных методов находится старый добрый rpc. Сам веб-сервер — это классическое express-приложение. Достаточно добавить туда обертку для роутов с вызовом нужных методов тех-же моделей данных.
Post scriptum
Предлагаемый в статье подход не претендует на какие-то революционные изменения в клиент-серверных приложениях. Он, только, добавляет немного комфорта в процесс разработки, позволяя сосредоточится на бизнес-логике собранной в одном месте.
Этот проект экспериментальный, пишите в комментариях, стоит ли, на ваш взгляд, продолжить этот эксперимент.
Всё программное обеспечение можно условно разделить на классы. Например, по выполняемым функциям: графические редакторы , бухгалтерские программы, и так далее. Но сейчас пойдёт речь не о такой классификации, а о разделении программ по признаку, где эта программа должна выполняться: дома на вашем компьютере, или на сервере в Интернет.
Как соединить клиент и сервер по локальной сети без лишнего гемороя?
Я понял, как соединять клиент и сервер на одном компьютере, что, конечно, не прокатит, если клиент и сервер будут на разных компах, но подключены к одному модему. Как это реализовать без IIS? Просто сейчас любая игра имеет возможность запустить локальный сервер хоть с калькулятора, без посторонних служб, типа IIS. Да и мне надо, чтоб сервером мог стать любой комп, а не только тот, на котором он писался (если здесь дело только в IP в адресе, то это я приблизительно понимаю, как сделать).
Клиент-сервер по локальной беспроводной сети
Добрый день, хочу разработать приложение клиент которое будет связываться с серверным приложением.
Создание локальной сети клиент-сервер Windows XP
Есть 10 компьютеров с установленной Windows Home Edition, n-ое количество кабеля. Необходимо.
Игра по локальной сети через интернет. как сделать vpn сервер на своем компе. без хамачи тангл и.т.п
здравствуйте . Задача такая нужно играть в игры с людьми как бы по локалке но на самом деле через.
Серверный компьютер
Если мы говорим про аппаратную часть, то сервер – это специализированный компьютер или же специальное оборудование, которое используется для выполнения каких-либо узкоспециализированных функций, требующих больших вычислительных мощностей. Выполнение узкоспециализированных функций сервера обусловлено использованием специального серверного программного обеспечения.
Иногда вместо термина сервер вы можете услышать словосочетание выделенный компьютер, опять же, это потому, что функции сервера в компьютерной сети отличаются от функций других машин. В лучшем случае человек работает с серверной машиной только один раз – когда настраивает сервер, далее работа серверного компьютера (опять же, в идеальном случае) происходит автономно без вмешательства человека.
У нас сейчас не стоит цель детально погружаться в масштабируемость и сборку серверных компьютеров, и уж тем более сейчас не стоит цель давать рекомендации по сборке серверных машин различного назначения, так как это довольно специфичная и довольно узкая тематика. Сейчас нам нужно понимать, что сервер – это специально выделенный компьютер для каких-то определённых функций (хотя это не всегда так), зачастую при недостатке бюджета сервер может выполнять сразу несколько функций.
Также стоит заметить, что обычно управление сервером осуществляют не рядовые пользователи, а специально обученные и подготовленные системные администраторы, в задачу которых входит обслуживание серверных компьютеров.
Читайте также: