Как не разветвляющийся веб-сервер работает?

Попробуйте это:

if (ref.match(/^https?:\/\/([^\/]+\.)?reddit\.com(\/|$)/i)) {
  alert("Came from reddit");
}

Регулярное выражение:

/^           # ensure start of string
 http        # match 'http'
 s?          # 's' if it exists is okay
 :\/\/       # match '://'
 ([^\/]+\.)? # match any non '/' chars followed by a '.' (if they exist)
 reddit\.com # match 'reddit.com'
 (\/|$)      # match '/' or the end of the string
/i           # match case-insenitive
9
задан antony.trupe 30 May 2010 в 22:42
поделиться

2 ответа

Basic псевдокод:

setup
while true
    select/poll/kqueue
    with fd needing action do
        read/write fd
        if fd was read and well formed request in buffer
            service request
        other stuff
  • Хотя select () & friends блокируются, ввод-вывод сокета не блокируется. Вас блокируют только до тех пор, пока у вас не появится что-нибудь интересное.
  • Обработка отдельных запросов обычно включает чтение дескриптора файла из файла (статический ресурс) или процесса (динамический ресурс), а затем запись в сокет. Это можно сделать легко, не сохраняя особого состояния.
  • Таким образом, запрос службы выше обычно означает открытие файла, добавление его в список для select и отслеживание чтения оттуда выходит на определенную розетку. При необходимости замените FastCGI на файл.

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

  • Не уверен насчет других, но у nginx есть 2 процесса: мастер и рабочий. Мастер прослушивает, а затем передает принятое соединение рабочему для обработки.
8
ответ дан 4 December 2019 в 19:36
поделиться

select () PLUS неблокирующий ввод-вывод по существу позволяет вам управлять множественными соединениями и отвечать на них, поскольку они входят в один поток ( мультиплексирование ), вместо того, чтобы иметь несколько потоков / процессов обрабатывают по одному сокету каждый. Цель состоит в том, чтобы свести к минимуму отношение площади сервера к количеству подключений.

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

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

Этот тип сервера всегда ожидает подключения, путем блокировки на select (). Как только он его получает, он обрабатывает соединение, а затем повторно обращается к select () в бесконечном цикле. В простейшем случае этот серверный поток НЕ блокирует любое другое время, кроме того, когда он настраивает ввод-вывод.

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

Найдите « мультиплексирование сетевых сокетов » для получения дополнительных ресурсов.

Или попробуйте сетевое программирование Unix Стивенса, Феннера, Рудофф

этот серверный поток НЕ блокирует любое другое время, кроме того, когда он настраивает ввод-вывод.

Если есть второе соединение, которое входит, оно будет обработано в следующий раз, когда сервер получит доступ к select (). На этом этапе первое соединение все еще может быть получено, и мы можем начать отправку на второе соединение из того же потока сервера. Это и есть цель.

Найдите « мультиплексирование сетевых сокетов » для получения дополнительных ресурсов.

Или попробуйте сетевое программирование Unix Стивенса, Феннера, Рудофф

этот серверный поток НЕ блокирует любое другое время, кроме того, когда он настраивает ввод-вывод.

Если есть второе соединение, которое входит, оно будет обработано в следующий раз, когда сервер получит доступ к select (). На этом этапе первое соединение все еще может быть получено, и мы можем начать отправку на второе соединение из того же потока сервера. Это и есть цель.

Найдите « мультиплексирование сетевых сокетов » для получения дополнительных ресурсов.

Или попробуйте сетевое программирование Unix Стивенса, Феннера, Рудофф

4
ответ дан 4 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: