2011-01-12 41 views
9

Ai đó có thể giải thích cho chúng tôi sự khác biệt về hành vi giữa các thông số sau:Sự khác biệt giữa tùy chọn keep_alive và persistent cho yêu cầu HTTP là gì?

tham số keep_alive trong lớp Zend_Http_Client?

dai dẳng trong lớp Zend_Http_Client_Adapter_Socket?

Tôi muốn hiểu những gì tôi cần làm để duy trì một kết nối HTTPS mở (để tránh sự phân ly của SSL).

Cảm ơn, Gaston

+0

Có vẻ như bạn muốn liên tục. – Amber

Trả lời

0

KeepAlive có nghĩa là kết nối có thể được tái sử dụng trong quá trình cả một yêu cầu cá nhân, mặc dù nó sẽ đóng cửa vào cuối năm theo yêu cầu. Liên tục có nghĩa là kết nối sẽ tồn tại vượt quá yêu cầu riêng lẻ để được sử dụng bởi một yêu cầu tiếp theo trên cùng một quy trình PHP.

+0

Điều này không chính xác. Keep-Alive có nghĩa là bạn có thể thực hiện một số yêu cầu đến cùng một máy chủ (giả sử nó sử dụng HTTP/1.1) bằng cách sử dụng cùng một kết nối. Tuy nhiên, nếu bạn không thực hiện yêu cầu nhanh chóng, kết nối sẽ được máy chủ đóng lại. – Brad

1

Nếu bạn sử dụng kết nối liên tục nên sử dụng cũng như giữ nguyên, vì không giữ cho Alive HTTP 1.1 kết nối, persitent sẽ phải thực hiện rất nhiều công việc để mô phỏng công việc.

Edit: (đó là thời gian để ăn)

Keepalive thiết lập các cuộc đàm phán về một quite- thời gian ngắn cài đặt, thiết lập bởi các máy chủ. Apache theo mặc định xử lý 15s cho các yêu cầu Giữ ​​lại, nhưng cài đặt được tối ưu hóa hiện tại là 5 giây. Điều này chủ yếu được thực hiện để giúp khách hàng HTTP tải xuống js và css được đính kèm vào một trang trong cùng một kết nối HTTP. Nếu bạn có thể điều chỉnh cài đặt máy chủ, bạn có thể thử các truy vấn Keep-Alive dài nhất (nhưng hãy cẩn thận, điều này sẽ giới hạn nghiêm trọng số lượng khách hàng được máy chủ của bạn tán thành).

Kết nối liên tục Chế độ được thực hiện để thực thi mô phỏng liên tục lâu dài, ổ cắm mở không đóng vào cuối tập lệnh. Bạn nên rất cẩn thận với các thiết lập như vậy. Bạn đang ở chế độ CLI? FCGI ?. Nếu bạn đang chạy trong một quá trình apache tôi thực sự không chắc chắn bạn sẽ nhận được cùng một connexion trên yêu cầu tiếp theo trên kịch bản này (có thể sẽ được xử lý bởi một quá trình apache), nó thậm chí còn tồi tệ nhất nếu mã của bạn đang chạy trên một số máy chủ apache trong một triển khai lớn. Và điều này là dành cho phía máy khách (PHP), nhưng nó cũng có thể là một nỗi đau lớn cho máy chủ được nhắm mục tiêu.

Re-edit: (như một cái gì đó về SSL Phải nói)

Bạn có chắc chắn bạn cần để tối ưu hóa thời gian đàm phán SSL? SSL sử dụng Cache, ít nhất là ở phía máy chủ, để hạn chế sự phân giải đối với yêu cầu đầu tiên. Bộ nhớ đệm phía máy khách của phiên SSL có thể được thực hiện bởi hàm stream_socket_client (được sử dụng bởi lớp Zend. Nếu không, bạn có thể tự mình thử nghiệm một lớp mới (chỉ cần triển khai giao diện) và thử sử dụng curl, curl sử dụng bộ đệm ẩn SSL phiên theo mặc định.

+0

cảm ơn bạn đã nhập –

0

FYI, trong khi vẫn tiếp tục sử dụng lại kết nối HTTP, lớp bộ điều hợp (ít nhất là gần đây là 1.10) không xử lý chính xác và mở kết nối mới bất kể lá cờ.

Các vấn đề liên quan