Как сервер обрабатывает запросы веб-сервисов от нескольких клиентов - PullRequest
8 голосов
/ 26 ноября 2011

Я только что завершил приложение для Android, которое использует веб-сервисы для подключения к удаленной базе данных.Я работал на localhost.

Теперь я планирую разместить свои веб-сервисы на сервере.Допустим, у меня установлено приложение Android на любом количестве разных клиентских смартфонов.Каждый пользователь смартфона одновременно вызывает веб-сервис.

Теперь, как сервер обрабатывает эти запросы?Это выполняет один поток за запрос?Я хочу узнать о работе сервера в деталях.Учитывая, что все телефоны используют GPRS, будут ли какие-либо задержки в такой ситуации?

Кстати, все мои веб-сервисы основаны на SOAP, а сервер, который я планирую использовать позже, будет SQL Server.Я использовал .NET Framework для создания веб-сервисов.

Ответы [ 3 ]

6 голосов
/ 26 ноября 2011

Это для общей концепции, а не для Android

Обычно каждый из пользователей отправляет HTTP-запрос на страницу.Сервер получает запросы и передает их разным работникам (процессам или потокам).

В зависимости от заданного URL-адреса сервер читает файл и отправляет его обратно пользователю.Если файл представляет собой динамический файл, такой как файл PHP, файл выполняется перед отправкой обратно пользователю.

Как только запрошенный файл был отправлен обратно, сервер обычно закрывает соединение через несколько секунд.

Посмотрите на Как работают веб-серверы

РЕДАКТИРОВАТЬ:

Для HTTP используется TCP, который является протоколом на основе соединений,Это значит, что клиенты устанавливают соединение TCP во время связи с сервером.

Несколько клиентов могут подключаться к одному и тому же порту назначения на одном и том же компьютере назначения одновременно.Сервер просто открывает несколько одновременных подключений.

Apache (и большинство других HTTP-серверов) имеют модуль мультиобработки (MPM).Это отвечает за распределение потоков / процессов Apache для обработки соединений.Эти процессы или потоки могут затем работать параллельно на своем собственном соединении, не блокируя друг друга.Apache MPM также имеет тенденцию сохранять открытые «резервные» потоки или процессы, даже когда нет открытых соединений, что помогает ускорить последующие запросы.

Примечание:

Один изНаиболее распространенные проблемы с многопоточностью - «условия гонки» - , когда два запроса делают одно и то же («гонки» делают одно и то же), если это один ресурс, один из нихсобирается победить.Если они оба вставят запись в базу данных, они не смогут получить одинаковый идентификатор - один из них победит.Поэтому при написании кода нужно быть осторожным, чтобы понять, что одновременно выполняются другие запросы, и может изменить вашу базу данных, записать файлы или изменить глобальные переменные.

3 голосов
/ 26 ноября 2011

Сервер будет поддерживать пул потоков, прослушивающий входящие запросы. После получения запроса поток обработает запрос и вернет ответ. Если все запросы получены одновременно и они меньше, чем максимальное количество потоков в пуле, все они будут параллельными службами (хотя фактическая обработка будет чередоваться в зависимости от количества ядер / процессоров). Если запросов больше, чем потоков, запрос будет помещен в очередь (в ожидании соединения) до тех пор, пока поток не освободится или не истечет время ожидания запроса клиента.

Если вы подключаетесь к услуге из мобильной сети, в исходном соединении время ожидания выше, но этого недостаточно, чтобы изменить ситуацию.

2 голосов
/ 26 ноября 2011

Ваш вопрос в действительности связан не с Android, а с мобильной разработкой с веб-интерфейсом.

Я не знаю, как использовать .NET для разработки серверных приложений, но если вы берете пример Apache / PHP/ MySQL, каждый запрос выполняется в отдельном потоке.

Могут быть небольшие задержки, пока запрос достигает сервера, но это не должно влиять на время, необходимое вашему серверу для обработки запроса и данных.

Одна из вещей, о которой стоит подумать, - это избегать отправки нескольких запросов от одного и того же клиента.Это общая проблема реализации: поскольку у вас нет данных, которые уже были возвращены, вы думаете, что ожидающих запросов нет, и запускаете новый запрос.Это может создать ненужную нагрузку на ваш сервер.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...