Tôi đã sử dụng Redis , NGINX &PHP-FPM cho dự án trò chuyện của tôi. Không phải là siêu thanh lịch, nhưng nó thực hiện thủ thuật. Có một số mảnh ghép cho câu đố.
-
Có một tập lệnh PHP rất đơn giản nhận các lệnh của khách hàng và đặt chúng vào một DANH SÁCH khổng lồ. Nó cũng kiểm tra tất cả các DANH SÁCH phòng và DANH SÁCH riêng tư của người dùng để xem có tin nhắn nào mà nó phải gửi hay không. Điều này được thăm dò ý kiến bởi một khách hàng viết bằng jQuery và nó được thực hiện sau mỗi vài giây.
-
Có một tập lệnh PHP dòng lệnh hoạt động phía máy chủ trong một vòng lặp vô hạn, 20 lần mỗi giây, kiểm tra danh sách này và sau đó xử lý các lệnh này. Tập lệnh xử lý ai đang ở trong phòng nào và quyền trong bộ nhớ tập lệnh, thông tin này không được lưu trữ trong Redis.
-
Redis có DANH SÁCH cho từng phòng &DANH SÁCH cho từng người dùng hoạt động như một hàng đợi riêng tư. Nó cũng có nhiều bộ đếm cho mỗi phòng mà người dùng ở. Nếu bộ đếm của người dùng ít hơn tổng số tin nhắn trong phòng, thì nó sẽ nhận được sự khác biệt và gửi cho người dùng.
Tôi đã không thể kiểm tra giải pháp này một cách căng thẳng, nhưng ít nhất từ điểm chuẩn cơ bản của tôi, nó có thể xử lý hàng nghìn tin nhắn mỗi giây. Ngoài ra còn có cơ hội chuyển nó sang một thứ gì đó như Node.js để tăng hiệu suất. Redis cũng đang hoàn thiện và có một số tính năng thú vị như lệnh Pub / Subscribe, có thể được quan tâm, có thể loại bỏ cuộc thăm dò ở phía máy chủ.
Tôi đã xem xét các giải pháp dựa trên Comet, nhưng nhiều giải pháp trong số đó phức tạp, được ghi chép kém hoặc sẽ yêu cầu tôi học một ngôn ngữ hoàn toàn mới (ví dụ:Jetty-> Java, APE-> C), v.v. là một vấn đề với Comet. Vì vậy, đó là lý do tại sao tôi gặp khó khăn với việc thăm dò ý kiến.
Tôi tưởng tượng bạn có thể làm điều gì đó tương tự với MongoDB. Một bộ sưu tập cho mỗi phòng, một bộ sưu tập cho mỗi người dùng và sau đó là một bộ sưu tập duy trì các quầy. Bạn sẽ vẫn cần viết một trình nền hoặc tập lệnh back-end để xử lý việc điều chỉnh các thông báo này đi đến đâu. Bạn cũng có thể sử dụng "bộ sưu tập giới hạn" của MongoDB, giúp sắp xếp tài liệu và cũng tự động xóa thư cũ, nhưng điều đó có thể phức tạp trong việc duy trì bộ đếm thích hợp.