Nano Hash - криптовалюты, майнинг, программирование

Powershell httplistener обрабатывает более одного запроса одновременно

Я использую обычный скрипт httplistener powershell. Скрипт прослушивает порт 80 и дает ответ.

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

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

Кто-нибудь знает, как обрабатывать параллельные http-запросы в PS?

Вот сценарий, который я использую:

$url = 'http://localhost/'
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add($url)
$listener.Start()

Write-Host "Listening at $url..."

while ($listener.IsListening)
{
$context = $listener.GetContext()
$requestUrl = $context.Request.Url
$response = $context.Response

Write-Host ''
Write-Host "> $requestUrl"

$localPath = $requestUrl.LocalPath
$route = $routes.Get_Item($requestUrl.LocalPath)

if ($route -eq $null)
{
$response.StatusCode = 404
}
else
{
$content = & $route
$buffer = [System.Text.Encoding]::UTF8.GetBytes($content)
$response.ContentLength64 = $buffer.Length
$response.OutputStream.Write($buffer, 0, $buffer.Length)

}
$response.Close()

$responseStatus = $response.StatusCode
Write-Host "< $responseStatus"
}

Как правильно обрабатывать несколько запросов одновременно? Спасибо всем!


Ответы:


1

Вы можете использовать несколько пространств выполнения (даже пул пространств выполнения) в одном процессе PowerShell. Подробнее о том, как это сделать, см. в этом сообщении в блоге.

10.10.2013
  • Спасибо. Я пробовал оба примера, но каждый запрос ожидает другого в первом начальном конвейере... Я позволяю сценарию считать 1 000 000 после отправки ответа (это работает). Во время подсчета в канале 1 я запускаю запрос другим браузером, и он ждет, пока закончится первый канал. Не могли бы вы помочь мне? 10.10.2013
  • @Florian Откуда берутся $routes? 10.10.2013
  • Привет, Кит, $routes находится в блоке сценария следующим образом: $routes = @{ /ola = { return '‹html›‹body›Hello world!‹/body›‹/html›' } } 10.10.2013
  • Возможно ли, что вы напишете/измените код, чтобы он работал? Важно то, что запросы можно обрабатывать параллельно, потому что 2-й, 3-й, ... не мог ждать, пока... 10.10.2013
  • Вчера я долго боролся с этим и столкнулся с одной фундаментальной проблемой с Register-ObjectEvent, PowerShell последовательно обрабатывает зарегистрированные обратные вызовы. Таким образом, даже несмотря на то, что мне удалось заставить несколько BeginGetContext() раскрутиться, обратный вызов, который происходит для обслуживания запроса, эффективно сериализуется. :-( 12.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..