2009-08-06 11 views
15

Có cách nào để thực hiện một yêu cầu HTTP không đồng bộ trong PHP mà không đưa ra phản hồi không? Tức là, một cái gì đó tương tự như AJAX - kịch bản PHP khởi tạo yêu cầu, thực hiện điều đó và sau đó, khi nhận được phản hồi, một hàm/phương thức gọi lại hoặc một tập lệnh khác xử lý phản hồi.Các yêu cầu HTTP không đồng bộ trong PHP

Một cách tiếp cận đã vượt qua tâm trí của tôi - tạo ra một quy trình php mới với một tập lệnh khác cho mỗi yêu cầu - tập lệnh thứ hai thực hiện yêu cầu, chờ phản hồi rồi phân tích dữ liệu và thực hiện bất cứ điều gì, trong khi tập lệnh gốc về việc sinh sản các quy trình mới. Tuy nhiên, tôi có nghi ngờ về hiệu suất trong trường hợp này - phải có một số hình phạt về hiệu suất từ ​​việc phải tạo ra một quy trình mới mỗi lần.

Trả lời

9

Có, tùy thuộc vào lưu lượng truy cập trang web của bạn, việc sinh ra một quy trình PHP riêng để chạy tập lệnh có thể bị tàn phá. Nó sẽ hiệu quả hơn khi sử dụng shell_exec() để bắt đầu một quá trình nền để lưu đầu ra vào một tên tệp mà bạn đã biết, nhưng ngay cả điều này cũng có thể là tài nguyên chuyên sâu.

Bạn cũng có thể có hàng đợi yêu cầu được lưu trữ trong cơ sở dữ liệu. Một quá trình nền riêng biệt sẽ kéo công việc, thực thi nó và lưu đầu ra, có thể thiết lập một cờ trong DB mà quá trình web của bạn có thể kiểm tra.

Nếu bạn định sử dụng phương thức xếp hàng DB, hãy sử dụng lớp chức năng curl_multi * để gửi tất cả các yêu cầu được xếp hàng cùng một lúc. Điều này sẽ giới hạn thời gian thực hiện của mỗi lần lặp trong quá trình nền của bạn đến thời gian yêu cầu dài nhất.

3

V5 có thể không được tạo luồng, nhưng bạn có thể tạo các ứng dụng khai thác đa nhiệm trong quá trình.

Kiểm tra bài viết sau: "Phát triển các ứng dụng đa nhiệm với PHP V5" từ IBM DeveloperWorks. Bạn có thể tìm thấy ở đây http://www.ibm.com/developerworks/web/library/os-php-multitask/