2013-04-06 104 views
0

我使用Indy10並創建了一個使用從TIdHttpServer派生的類的Web服務器。在我的子類中,我重寫了方法。而這似乎是正確解僱當MaxConnections超過。Indy 10 TIdHttpServer缺少MaxConnectionReply屬性

在早期版本的Indy,至少根據雷米勒博的評論here,有上TIdHttpServerMaxConnectionReply財產。如果超過MaxConnections,這可用於創建自定義消息。 Indy 10似乎並不是這種情況。

Indy10有沒有一種方法可以在MaxConnections超過時創建自定義消息?

+1

不回答你的問題,但你指出是不正確:在你同一個線索中,雷米解釋說,在TIdHttpServer中沒有'MaxConnectionReply'屬性,如果你再讀一遍,你會注意到Indy 10而不是Indy 9。 – jachguate 2013-04-06 01:00:21

回答

1

正如我在你鏈接的線程中所述,MaxConnectionReply是由TIdCmdTCPServer實現的,其中TIdHTTPServer不是從中派生出來的。既然你要重寫DoMaxConnectionsExceeded(),你將不得不自己回覆手動發送到客戶端,並確保它是正確的HTTP格式,例如:

procedure TMyHttpServer.DoMaxConnectionsExceeded(AIOHandler: TIdIOHandler); 
var 
    Html: TIdBytes; 
begin 
    Html := ToBytes('<html><body>500 - Too many connections</body></html>'); 
    AIOHandler.WriteLn('HTTP/1.0 500 Too many connections'); 
    AIOHandler.WriteLn('Content-Type: text/html'); 
    AIOHandler.WriteLn('Content-Length: ' + IntToStr(Html)); 
    AIOHandler.WriteLn('Connection: close'); 
    AIOHandler.WriteLn; 
    AIOHandler.Write(Html); 
end; 
+0

抱歉花了這麼長時間去取回。幸運的是,通過增加MaxConnections我沒有問題。但我想明白。我將MaxConnections設置得非常低,並驗證DoMaxConnectionsExceeded過程被觸發。使用上面提供的示例,我從未看到任何文本。因此,我使用了' 500 - 連接太多'這將顯示消息。 – 2013-04-30 20:44:43

+0

對不起,我的壞。我忘了在HTTP回覆中包含一些正文數據。我已經更新了我的答案。 – 2013-04-30 20:53:23