2012-08-15 42 views
5

Tôi đang làm việc trên một dự án năng lượng. Trong trang web của tôi, có thể có các dịch vụ năng lượng được đăng ký với quy trình đăng ký qua các dịch vụ web. Ban đầu nó đã được 1 để bắt đầu với bây giờ 3 thêm đến để tích hợp.PHP Làm cách nào để triển khai nhiều dịch vụ web một cách đồng thời?

Trên trang đầu tiên tôi đã hiển thị các gói dựa trên mã zip. Bây giờ trên trang này tôi đã yêu cầu tất cả 4 nhà cung cấp năng lượng liệt kê các kế hoạch năng lượng.

Để yêu cầu mỗi dịch vụ tại một thời điểm theo cách tuần tự, chắc chắn sẽ mất nhiều thời gian hơn khi tôi lấy dữ liệu từ nguồn bên ngoài và đây là trang đầu tiên, vì vậy tôi không muốn làm chậm nó ở lần đầu tiên chỉ dụ.

Làm cách nào tôi có thể yêu cầu đồng thời tất cả các dịch vụ và thu thập dữ liệu từ mỗi dịch vụ và liệt kê dữ liệu trên trang cuối cùng.

+0

Tôi biết nhiều người sẽ phàn nàn, nhưng bạn có nghĩ về đa luồng không? Từ một vài kết quả đầu tiên trên google, những kết quả này giống như những nơi tốt để bắt đầu ... http://villavu.com/forum/showthread.php?t=73623 và http://blog.motane.lu/2009/01/02/multithreading-in-php/hỗ trợ trông mỏng, nhưng điều này có thể tăng tốc mọi thứ bằng cách có tất cả 4 yêu cầu đi "một lần" - thats những gì tôi tưởng tượng ít nhất ... – blad

+1

Điều gì về bộ nhớ đệm? Các kế hoạch này thay đổi thường xuyên như thế nào? Nó có phải là thời gian thực không? Tại sao không có một công việc cron mà cuộc thăm dò tất cả các dịch vụ mỗi 1-5 phút và lưu trữ các kết quả trong memcache hoặc một bảng HEAP MySQL? Sau đó, front-end của bạn có thể đọc từ bộ nhớ cache thay vì webservices. – Costa

+0

@Costa Âm thanh là giải pháp tốt. Nhưng vấn đề là ngay cả khi tôi không biết có bao nhiêu mã zip và tần suất chúng thay đổi kế hoạch. Có thể có khoảng 50 nghìn mã zip. Nhưng tôi sẽ ghi nhớ điều này và thực hiện nó sẽ khả thi ở đâu. – Vins

Trả lời

3

Thực sự chỉ có một cách không khó chịu để làm điều này với PHP khi thực thi trên máy chủ web. Bạn sẽ cần mô-đun cURL được biên dịch thành PHP. Nó có hỗ trợ tích hợp để thực hiện các yêu cầu song song. Xem các nhận xét và tài liệu trên www.php.net để biết các ví dụ sử dụng.

Hãy thử: http://www.php.net/manual/en/function.curl-multi-init.php

tùy chọn khác, như forking quá trình nền hoặc gọi một vỏ UNIX, là khủng khiếp để duy trì và hiếm khi cross-platform. Đa luồng không phải là một tùy chọn hợp lệ trong hầu hết mọi môi trường PHP phổ biến.

Tôi nên đề cập, mặc dù không nhất thiết gợi ý rằng có thể sử dụng phương pháp AJAX. Nó không phải là nhẹ trong mọi trường hợp, nhưng nó phải được cân nhắc.

+0

Khi giao dịch với một tình huống tương tự, tôi đã giải quyết nó bằng cách giảm tải công việc để lấy lại dữ liệu trong vỏ bánh, sử dụng pcntl_fork để chạy các yêu cầu webservice đồng thời. Các tiến trình con lưu trữ các phản hồi trong bộ nhớ chia sẻ và khi tất cả các quá trình đã được thực hiện, quy trình trình bao cha mẹ thu thập chúng và gửi nó trở lại yêu cầu web. Nó làm việc cho tôi để giảm thời gian tải bởi số lượng lớn. Nhưng hãy xem xét những gì Pestilence nói về giải pháp này. – Ceeram

+0

@pestilence Điều gì xảy ra nếu tôi đang sử dụng các yêu cầu khác nhau để gọi dịch vụ web. một bằng cách sử dụng REST secong bằng cách sử dụng SOAP thứ ba bằng cách sử dụng Curl .. Tại thời điểm đó Làm thế nào nó sẽ giúp ful .. cảm ơn –

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