Сервер потоков HTTP: потоки? - PullRequest
1 голос
/ 01 марта 2010

Я уже писал здесь о сервере чата http, который я хочу создать: Альтернативный порт http? Этот http-сервер должен транслировать текст каждому пользователю в той же комнате чата на сайте. Браузер будет оставаться на связи и ждать дальнейшего HTML-кода. (да, это работает, браузер не будет отклонять соединение).

У меня новый вопрос: поскольку этому серверу чата не требуется получать информацию от клиента, нет необходимости прослушивать клиента после того, как сервер отправил свой первый ответ. Новые сообщения чата будут отправлены на сервер по новому соединению. Таким образом, я могу открыть 2 потока, один ждет новых клиентов (или новых сообщений) и один для потоковой передачи html. Это хорошая идея, или я должен использовать один поток на клиента? Я не думаю, что хорошо иметь один поток / клиент, когда в чате много пользователей, так как сервер должен обрабатывать несколько разных чатов со своими комнатами.

3 возможности: 1. Один поток для всех клиентов, отправляйте текст каждому клиенту подряд - не должно быть большой задержки, так как это только текст это будет похоже на: user1.send ("текст"); user2.send ("текст"), ... 2. Одна тема для чата или чата 3. Одна тема на пользователя чата - ... много ...

Спасибо, я еще ничего не сделал с розетками;).

Ответы [ 2 ]

1 голос
/ 01 марта 2010

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

Часто немного более абстрактная точка зрения работает лучше: у вас есть задачи, которые нужно выполнить, и потоки, которые выполняют эти задачи, но потоку на самом деле не «важно», какую задачу он выполняет.

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

В этом случае точное количество потоков становится в основном неактуальным - это то, что вы можете (и делаете) настраивать в соответствии с количеством доступных ядер ЦП, типом задач и т. Д., А не то, что влияет на базовые Дизайн программы.

0 голосов
/ 01 марта 2010

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

Если вы хотите серьезно разбираться в понятиях архитектуры http-сервера, Google:

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