【问题标题】:Powershell httplistener handle more than one request at the same timePowershell httplistener 同时处理多个请求
【发布时间】:2013-10-18 08:02:26
【问题描述】:

我正在使用普通的 powershell httplistener 脚本。 该脚本监听 80 端口并给出响应。

现在我尝试同时处理多个请求。问题是第二个响应必须等到脚本完成第一个响应。

我尝试为每个 http-request 开始自己的工作 - 但我无法从 PS-Job 向侦听器发送响应。

有谁知道,如何在 PS 中处理并行 httprequest?

这是我正在使用的脚本:

$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"
}

同时处理多个请求的正确方法是什么? 谢谢@所有人!

【问题讨论】:

    标签: powershell httprequest httpresponse httplistener


    【解决方案1】:

    您可以在同一个 PowerShell 进程中使用多个运行空间(甚至是运行空间池)。有关如何执行此操作的详细信息,请参阅此blog post

    【讨论】:

    • 谢谢。我尝试了这两个示例-但是每个请求都在第一个开始管道中等待另一个请求...我在发送响应后将脚本计数为 1,000,000(有效)。在管道 1 中计数时,我从另一个浏览器开始请求,它正在等待第一个管道完成。你能帮帮我吗?
    • @Florian $routes 来自哪里?
    • 嗨 Keith,$routes 在脚本块中是这样的: $routes = @{ "/ola" = {​​ return 'Hello world! ' } }
    • 您是否可以编写/更改代码以使其正常工作?重要的是,请求可以并行处理,因为第二个,第三个,......不能等到......
    • 昨天我在这个问题上纠结了很久,但遇到了 Register-ObjectEvent 的一个基本问题,PowerShell 会按顺序处理注册的回调。因此,即使我能够让多个 BeginGetContext() 启动,恰好为请求提供服务的回调也会被序列化。 :-(
    猜你喜欢
    • 2014-12-17
    • 2012-02-20
    • 2021-04-09
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2014-11-11
    • 2018-02-23
    相关资源
    最近更新 更多