2013-10-10 144 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