Попробуйте это:
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
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 на файл. РЕДАКТИРОВАТЬ:
select () PLUS неблокирующий ввод-вывод по существу позволяет вам управлять множественными соединениями и отвечать на них, поскольку они входят в один поток ( мультиплексирование ), вместо того, чтобы иметь несколько потоков / процессов обрабатывают по одному сокету каждый. Цель состоит в том, чтобы свести к минимуму отношение площади сервера к количеству подключений.
Это эффективно, потому что этот единственный поток использует преимущества высокого уровня активных подключений сокетов, необходимых для достижения насыщения (поскольку мы можем выполнять неблокирующий ввод-вывод для нескольких дескрипторы файлов).
Причина в том, что требуется очень мало времени, чтобы подтвердить, что байты доступны, интерпретировать их, а затем принять решение о соответствующих байтах для помещения в выходной поток. Фактическая работа ввода / вывода выполняется без блокировки этого потока сервера.
Этот тип сервера всегда ожидает подключения, путем блокировки на select (). Как только он его получает, он обрабатывает соединение, а затем повторно обращается к select () в бесконечном цикле. В простейшем случае этот серверный поток НЕ блокирует любое другое время, кроме того, когда он настраивает ввод-вывод.
Если есть второе соединение, которое входит, оно будет обработано в следующий раз, когда сервер выберет (). На этом этапе первое соединение все еще может быть получено, и мы можем начать отправку на второе соединение из того же потока сервера. Это и есть цель.
Найдите « мультиплексирование сетевых сокетов » для получения дополнительных ресурсов.
Или попробуйте сетевое программирование Unix Стивенса, Феннера, Рудофф
этот серверный поток НЕ блокирует любое другое время, кроме того, когда он настраивает ввод-вывод.Если есть второе соединение, которое входит, оно будет обработано в следующий раз, когда сервер получит доступ к select (). На этом этапе первое соединение все еще может быть получено, и мы можем начать отправку на второе соединение из того же потока сервера. Это и есть цель.
Найдите « мультиплексирование сетевых сокетов » для получения дополнительных ресурсов.
Или попробуйте сетевое программирование Unix Стивенса, Феннера, Рудофф
этот серверный поток НЕ блокирует любое другое время, кроме того, когда он настраивает ввод-вывод.Если есть второе соединение, которое входит, оно будет обработано в следующий раз, когда сервер получит доступ к select (). На этом этапе первое соединение все еще может быть получено, и мы можем начать отправку на второе соединение из того же потока сервера. Это и есть цель.
Найдите « мультиплексирование сетевых сокетов » для получения дополнительных ресурсов.
Или попробуйте сетевое программирование Unix Стивенса, Феннера, Рудофф