2010-02-12 23 views
6

Bạn đã sử dụng PHP trong một thời gian và tôi đã tự hỏi "toàn bộ hàng đợi tin nhắn" này là gì. Hãy lấy facebook làm ví dụ. Tôi có thể cập nhật trạng thái của mình nhưng sau đó tôi phải hiển thị rằng cập nhật trạng thái cho tất cả bạn bè của tôi (giả sử tôi có 3000 người theo dõi). Thậm chí nhiều công việc hơn nếu có nhận xét và họ phải được thông báo cho tất cả bạn bè đã để lại nhận xét qua email. Với ví dụ tôi đã thấy, có vẻ như tất cả các hàng đợi tin nhắn đều lấy "message" (cập nhật trạng thái của tôi) và đặt nó vào một khoảng trống tạm thời (hệ thống tập tin hoặc bảng DB). Sau đó tôi có một công việc cron kéo nó ra và cập nhật bảng của tôi.Giúp tôi hiểu cách hoạt động của hàng đợi thông báo

Với điều đó đã nói, làm cách nào để tôi xử lý dữ liệu đó? Tôi đoán tôi đang bối rối như thế nào điều này thực sự sẽ giúp tôi. Làm cách nào để dịch hàm sau vào hàng đợi thư và sau đó lên lịch cho hàm chạy sau này?

1 - Cập nhật trạng thái của tôi 2 - Bây giờ xuất bản nó trên trang của tôi và tất cả bạn bè của tôi. 3 - Nếu bình luận còn lại, hãy gửi email nhận xét mới nhất cho những người "đăng ký" nhận xét đó.

Câu hỏi của tôi là, làm cách nào để thao tác dữ liệu đó? Tôi chỉ cần chèn "bình luận" sau đó có một "công việc" mà kéo rằng nhận xét ra và cắm nó vào một chức năng xử lý nó?

Đây là ví dụ tôi dự định xem xét.

http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html

Xin cảm ơn trước.

Trả lời

3

Câu hỏi của tôi là, làm cách nào để thao tác dữ liệu đó? Tôi chỉ cần chèn "nhận xét" sau đó có "công việc" để lấy nhận xét đó ra và cắm vào một hàm xử lý nó?

Chính xác.

Cập nhật trạng thái xuất bản trên các trang Facebook có thể không liên quan đến hàng đợi tin nhắn - Tôi thực sự không biết thiết kế cụ thể của họ, nhưng tôi đoán rằng dữ liệu cập nhật chỉ được cung cấp theo yêu cầu thông qua truy vấn khi người dùng tải trang của họ . (Trừ khi Facebook có một quá trình riêng biệt để không chuẩn hóa dữ liệu cập nhật trạng thái.)

Ngược lại, gửi thông báo cập nhật trạng thái là một ứng cử viên tuyệt vời cho hàng đợi thư.

Việc triển khai điển hình sẽ liên quan đến việc viết một thư mới (thường là tối thiểu, có lẽ chỉ là id người dùng của bạn) vào hàng đợi thư cụ thể - có thể là hàng đợi "EmailStatusUpdateNotifications".

Quy trình khác sau đó dequeues tin nhắn và biết chính xác phải làm gì với chúng. Một quá trình dành riêng để gửi thông báo email cập nhật trạng thái sẽ sử dụng id người dùng (nội dung của thư) để tải trạng thái hiện tại của bạn và danh sách địa chỉ email của bạn bè, tạo email và gửi chúng.

Hóa ra bạn có thể tìm thấy nhiều thông tin tốt về kiến ​​trúc của Facebook ở số Why are Facebook, Digg, and Twitter so hard to scale? ở Khả năng mở rộng cao.

+0

cảm ơn bạn đã giải thích. Hàng đợi tin nhắn có nhiều "cột" không. Nếu tôi đang lưu trữ user_id và tin nhắn, chức năng của tôi sẽ cần phân tích bằng cách nào đó. Hoặc là nó chỉ là một tập tin "phẳng". – luckytaxi

+0

Chính xác (một lần nữa) - bạn có quyền kiểm soát nội dung (hoặc nội dung) và định dạng thư của bạn và bộ xử lý hoặc chức năng của bạn chỉ cần biết cách phân tích cú pháp chúng. (Hầu hết việc triển khai hàng đợi thư cũng cung cấp nhiều định dạng tuần tự hóa khác nhau, nhưng bạn thường không cần xử lý trực tiếp các định dạng này trừ khi bạn đang duyệt nội dung hàng đợi thô.) –

+0

ah ok. tôi đoán xml sẽ có ích sau đó, eh? – luckytaxi

2

Tôi chỉ cần chèn "nhận xét" sau đó có "công việc" để lấy nhận xét đó ra và cắm nó vào một hàm xử lý nó?

Một trong những điểm có hàng đợi tin nhắn là tách dịch vụ và xử lý không đồng bộ.

Bạn sẽ có dịch vụ xếp hàng đợi thư, khi ai đó thay đổi trạng thái của họ, bạn sẽ gửi thư đến một hàng đợi cụ thể. Bạn có thể làm điều đó từ mã php được chạy khi người dùng thay đổi trạng thái của mình.

Sau đó, bạn sẽ có một công việc dịch vụ/nền chạy ở đâu đó để kéo thư từ hàng đợi đó. Nó chắc chắn là một cái gì đó bên ngoài quá trình PHP gửi tin nhắn dựa trên một cuộc gọi HTTP. Công việc đó lấy ra các thông điệp từ hàng đợi, xử lý thông điệp - như tìm ra người gửi thư đến và sau đó gửi thư.

Bây giờ bạn đã có một cách linh hoạt để xử lý các cập nhật thư như vậy.

  • Sẽ khá dễ dàng khi dịch vụ cập nhật thư chạy trên máy khác so với máy chủ web.
  • Dễ dàng mở rộng hơn nếu bạn cần thêm sức mạnh.
  • Bạn có thể dễ dàng triển khai gửi chậm hơn - ví dụ: bạn có thể đợi một hoặc hai phút bằng cách gửi thư và nếu người dùng cập nhật trạng thái của anh ấy một lần nữa, bạn chỉ cần gửi 1 thư, chứ không phải 2
  • Bạn đã thực hiện tất cả điều này trong yêu cầu http của người dùng đã thay đổi trạng thái của anh ấy, anh ấy ' d phải đợi cho đến khi tất cả quá trình xử lý đó được hoàn tất.
+0

Yea, tôi gặp sự cố với việc gửi tải trọng của các email! Tôi sẽ phải tìm ra ngôn ngữ để sử dụng khi kéo dữ liệu ra. Tôi tự hỏi làm thế nào php cũng hoạt động thông qua CLI. – luckytaxi

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