2010-03-18 18 views
7

Tôi không chắc chắn về ngăn xếp tốt nhất để xây dựng ứng dụng trò chuyện. Hiện nay tôi đang nghĩ đến việc hai lựa chọn chính:ứng dụng trò chuyện: pubsubhubbub vs xmpp

  • facebook cơn lốc xoáy
    • nhược điểm: không sử dụng XMPP giao thức chat chính nhưng PubSubHubbub
    • ưu: tôi thực sự thích sự đơn giản của nó đối với sự phát triển (webserver + webframework); pubsubhubbub cũng có vẻ đơn giản như một giao thức hơn xmpp; và tôi biết python
  • XMPP + bosch, Punjab, ejabberd
    • nhược điểm: không biết erlang; tổng thể có vẻ hơi khó khăn hơn để phát triển
    • ưu: sử dụng giao thức XMPP

Ứng dụng trò chuyện sẽ cần phải có những điều sau đây:

  • Tin nhắn cá nhân
  • phòng Công
  • Phòng riêng
  • Lịch sử trò chuyện cho phòng (không phải mãi mãi, chỉ cần n tin nhắn cuối cùng)
  • html nhúng
  • url để trò chuyện phòng

Cả hai tùy chọn dường như khả năng mở rộng vì vậy đó là không thực sự lo lắng của tôi (chúng tôi đang nghĩ đến việc chạy các ứng dụng trong EC2 của Amazon cũng). Tôi biết có một dự án xây dựng một máy chủ xmpp sử dụng lốc xoáy nhưng nó không sẵn sàng để sử dụng sản xuất và thời hạn của chúng tôi không phải là lớn. Về cơ bản lo lắng chính của tôi là dễ phát triển và bằng cách nào đó hối hận sau này sử dụng pubsubhubbub để phát triển ứng dụng trò chuyện nhưng tôi đọc ở đâu đó rằng PubSubHubbub cuối cùng có thể thay thế XMPP thành REST thay thế SOAP - vậy bạn nghĩ sao?

CẬP NHẬT: Bạn có biết bất kỳ giải pháp nguồn mở nào sử dụng xmpp hỗ trợ MUC (public & riêng tư) và PM không?

+0

Lưu ý, PubSubHubbub (PuSH) thậm chí không gần với XMPP. PuSH là một giao thức Publish-Subscribe rất cơ bản, với một cái gì đó rất giống với [Dialback] (http://xmpp.org/extensions/xep-0220.html) để xác thực. XMPP là nhiều hơn nữa mà nó sẽ không phù hợp trong hộp bình luận này. – Zash

Trả lời

11

Đi cho XMPP.

Ngoài hộp, ejabberd có hỗ trợ cho tất cả các yêu cầu của bạn. Bạn sẽ không cần phải nhìn thấy bất kỳ erlang và viết mô-đun tùy chỉnh cho ejabberd. Và với Strophejs, XMPP trong trình duyệt (đó là những gì bạn đang làm rõ) là rất tốt.

Đối với câu hỏi cuối cùng của bạn về pubsubhubbub thay thế XMPP, đừng tính vào nó. XMPP là hơn 10 năm tuổi, nguồn mở vững chắc và triển khai tương thích độc quyền cả trên máy khách và máy chủ, và là thanh lịch để nó sẽ không biến mất.

Và bạn đang phát triển một ứng dụng trò chuyện là những gì XMPP được tạo ra.

+0

Strophe có vẻ tốt (nó cũng được sử dụng bởi Aristochat). Cảm ơn :) – Sofia

4

Facebook Tornao không sử dụng PubSubHubbub!

Đi cho XMPP, nó được thiết kế cho những gì bạn đang tìm kiếm. Tornado không được thiết kế cho điều đó một cách cụ thể, nhưng đối với các yêu cầu bỏ phiếu dài nói chung.

Không cần phải sử dụng Punjab, mô-đun http ràng buộc ejabbed thực hiện công việc khá tốt ngay bây giờ. Ngoài ra, bạn không cần phải học Erlang, giống như cách bạn không cần phải học C khi viết một webapp sử dụng Apache :) Kiểm tra các công cụ như Aristochat. Điều duy nhất bạn cần phải thực hiện là cấu hình của máy chủ XMPP và các phòng trò chuyện, sau đó là Javascript cho phía máy khách (trong trình duyệt).

+0

Cảm ơn. Aristochat trông đầy hứa hẹn. Trong khi đó cũng tìm thấy Speeqe (http://code.stanziq.com/speeqe). Tôi sẽ kiểm tra cả hai. Theo http://www.readwriteweb.com/archives/where_is_the_real_time_web_message_bus.php cơn lốc xoáy này sử dụng pubsubhubbub. – Sofia

0

PubSubHubbub (PuSH) không bao giờ có nghĩa là dành cho ứng dụng trò chuyện ngay từ đầu. Nó đôi khi được gọi là "IM cho Web". Tôi khuyên bạn nên xem qua trang trình bày này: Realtime Ruby for the Realtime Web by igrigorik

Câu hỏi thực sự là thời gian thực bạn muốn nhận? Nếu bạn muốn tốc độ thì XMPP là tùy chọn tốt nhất (500ms) trong khi PuSH phụ thuộc vào nguồn cấp dữ liệu của bạn và cách thức chuyển tiếp của nó. Hãy nhớ rằng, với PuSH tổng cộng 4 bước nhảy mạng trước khi nội dung tiếp cận người đăng ký.

Sự cố lớn hơn nữa là PuSH dựa trên HTTP Post. Ngay cả khi bạn kết thúc thiết kế một ứng dụng trò chuyện dựa trên PuSH, và nói ở giai đoạn sau, bạn muốn làm cho nó có sẵn cho các thiết bị khác hoặc thậm chí là ứng dụng trên máy tính để bàn, bạn sẽ phải chuyển tiếp cùng một nội dung bằng XMPP. Một nơi khác bạn sẽ mất dần là người dùng ứng dụng trò chuyện của bạn sẽ rất khó đăng nhập từ bất kỳ IM nào khác mà họ chọn.

1

Nếu bạn không cần liên kết qua XMPP nhưng muốn thử nghiệm mẫu và triển khai nhanh chóng cùng với khả năng mở rộng ra khỏi hộp, hãy xem ví dụ về khuôn khổ của trang web Nâng cao là chat server in one page of code.

0

Bạn có thể sử dụng API REST với WebSocket để triển khai kiến ​​trúc Nhà xuất bản/Đăng ký.

Atmosphereswagger sockets là khung công tác java đẹp mà bạn có thể thêm vào số Jersey REST api của bạn và đạt được điều này.

Blog của tác giả của Atmospehre, jfarcand, có một example of chat application được tạo bằng các công nghệ này.