2013-10-10 232 views
2

我正在使用普通的powershell httplistener脚本。 脚本在端口80上监听并给出响应。Powershell httplistener同时处理多个请求

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

我试着为每个http请求启动一个自己的工作 - 但是我不能从PS-Job发送一个响应给监听者。

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

这里是脚本I'm使用:

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

什么是处理在同一时间多个请求的正确方法? 谢谢@all!

回答

0

您可以在同一个PowerShell进程中使用多个运行空间(即使是运行空间池)。有关如何做到这一点的详细信息,请参阅此blog post

+0

谢谢。我尝试了两个示例 - 但每个请求都在等待第一个初始管道中的另一个请求... 在发送响应(有效)后,我让脚本计数为1,000,000。在管道1中计数时,我通过另一个浏览器开始请求,并在第一个管道完成时等待。 你能帮我吗? – Florian

+0

@Florian $路线从哪里来? –

+0

喜基思, $路线是这样的脚本块: $路线= @ { “/ OLA”= {回报“世界,你好!'} } – Florian