Tôi đang sử dụng Delphi 2006 và Indy 10. Tôi tạo một biểu mẫu và thả xuống thành phần IdHttpServer. Tôi làm cho một sự kiện OnCreate đối với hình thức để thiết lập các máy chủ hoạt động, và tôi nhập những dòng này cho OnCommandGet của máy chủ:IdhttpServer Delphi/Indy không đa luồng?
procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Beep;
Sleep(10000);
AResponseInfo.ContentText := DateTimeToStr(Now);
end;
Note Sleep trong 10 giây.
Sau đó tôi thử nghiệm với Firefox, sử dụng 2 trình duyệt. Tôi có cái đầu tiên kết nối với "localhost", và tôi nghe thấy một tiếng bíp ngay lập tức. Sau đó, tôi chuyển sang trình duyệt thứ 2 và kết nối với máy chủ cục bộ (trong vòng chưa đầy 10 giây) nhưng không phát ra tiếng bíp ngay lập tức. Nó chờ yêu cầu đầu tiên hoàn thành, sau đó phát ra tiếng bíp và chờ thêm 10 giây nữa.
Tôi nghĩ các thành phần này là đa luồng? Có một số tài sản tôi có thể thiết lập để làm cho nó hoạt động theo cách tôi nghĩ rằng nó sẽ (cả hai yêu cầu sẽ được trả lời ngay lập tức).
Bạn có thể kiểm tra xem mọi thứ có đang chạy trên cùng một chuỗi không bằng cách trả về Định dạng ('% d% d', [MainThreadID, GetCurrentThreadID]) cho giá trị ContentText. Nếu nó thực sự đa luồng, hai giá trị bạn nhận được trong mỗi yêu cầu sẽ khác nhau và giá trị thứ hai của cả hai câu trả lời có thể cũng sẽ khác nhau. –
Nếu tôi có thể quan tâm đến bạn theo cách khác: Tôi đã bắt đầu http://xxm.sourceforge.net/ để mở nguồn dự án mà tôi đang làm để giải quyết vấn đề này và các vấn đề tương tự. Tôi đã không thử nó trên Delphi 2006 được nêu ra, nó dựa trên Delphi 7, nhưng với một chút may mắn nó sẽ làm việc. –