2008-08-30 55 views
10

Nếu tôi có một hệ thống riêng biệt với khái niệm về người dùng và sự hiện diện của riêng mình, kiến ​​trúc thích hợp nhất để tạo cầu nối với mạng máy chủ XMPP là gì? Theo như tôi có thể nói có ba cách chính:Kiến trúc tốt nhất để kết nối với XMPP là gì?

  1. Làm máy chủ. Điều này tạo ra một điểm tiếp xúc, nhưng tôi lo sợ nó có ý nghĩa cho khả năng tương thích, và có khả năng tạo ra sự phức tạp trong hệ thống của tôi để mô phỏng một máy chủ.

  2. Hành động như khách hàng. Điều này dường như ngụ ý rằng tôi cần một kết nối cho mỗi người dùng trong hệ thống của tôi, điều này sẽ không có quy mô tốt.

  3. Tôi đã nghe về giao thức cổng XMPP, nhưng không rõ liệu đây có phải là giải pháp tốt hơn giải pháp máy khách hay không. Tôi cũng không thể biết đây có phải là tiêu chuẩn hay không.

Mọi đề xuất hoặc sự cân bằng sẽ được đánh giá cao. Ví dụ, bất kỳ giải pháp nào trong số các giải pháp này yêu cầu chạy mã bên trong máy chủ XMPP đích (không phải là điều tôi có thể làm).

Trả lời

4

Giao thức cổng XMPP mà bạn đã nghe có nhiều khả năng liên quan đến việc vận chuyển. Phương tiện là máy chủ kết nối với cả máy chủ XMPP và máy chủ không phải XMPP. Bằng cách chạy một phương tiện, tôi có thể sử dụng ứng dụng khách Jabber của mình để nói chuyện với ai đó bằng cách sử dụng MSN Messenger.

Phương tiện chuyên chở thường kết nối một lần với mạng từ xa cho từng JID mà nó xem trực tuyến. Đó là, đó là lựa chọn của bạn 2 ngược lại. Điều này là do không có mối quan hệ đặc biệt nào giữa mạng truyền tải và mạng không phải XMPP; việc vận chuyển chỉ đơn giản là hành động như một nhóm khách hàng thường xuyên. Để làm việc này, các máy khách XMPP trước tiên phải đăng ký với việc vận chuyển, cung cấp thông tin đăng nhập cho mạng từ xa và cho phép vận chuyển xem sự hiện diện của chúng.

Lý do duy nhất điều này có khả năng mở rộng quy mô tốt hơn là có thể có nhiều phương tiện vận chuyển cho cùng một mạng từ xa. Ví dụ, máy chủ Jabber của tôi có thể chạy một vận chuyển đến MSN, một máy chủ Jabber khác có thể chạy một máy chủ khác, và cứ thế, mỗi máy chủ cung cấp các kết nối cho một nhóm người dùng XMPP khác nhau. Trong khi điều này lan ra tải trên phía Jabber, và cân bằng tải trên hệ thống của bạn có thể trải ra tải là tốt, nó vẫn đòi hỏi nhiều kết nối giữa hai hệ thống.

Trong trường hợp của bạn, bởi vì (tôi giả định) bên không XMPP của sự vật đang hợp tác, việc đặt giao diện máy chủ XMPP trên máy chủ không phải XMPP có thể là đặt cược tốt nhất của bạn. Giao diện máy chủ đó phù hợp nhất để quản lý ánh xạ giữa các JID XMPP và cách JID đó sẽ xuất hiện trên mạng riêng của nó, thay vì buộc người dùng XMPP đăng ký và cứ thế.

Trong trường hợp bạn chưa từng thấy này, bạn có thể tìm thấy chúng hữu ích:

Hy vọng rằng sẽ giúp.

2

Tôi cũng đang làm việc trên một hệ thống tương tự.

Tôi đang đi với tuyến đường/cổng thành phần. Tôi đã xem xét một số tùy chọn và giải quyết với một tùy chọn này.

Cổng cơ bản là một thành phần với mục đích cụ thể là bắc cầu Jabber/XMPP với một mạng khác. Bạn sẽ phải xây dựng hầu hết những thứ bạn nhận được khi được cấp phép khi sử dụng XMPP làm ứng dụng khách. Những thứ như kiểm soát danh sách.

Có rất ít sự trợ giúp trực tuyến về thiết kế và xây dựng một thành phần thực tế. Giống như câu trả lời ở trên, tôi thấy rằng các giao thức/mở rộng xmpp có thể trợ giúp. Những chính con người:

Đọc qua những sẽ cho bạn thấy những gì XEPs bạn sẽ được dự kiến ​​để có thể xử lý. Bỏ qua những thứ sẽ được xử lý bởi máy chủ mà thành phần của bạn sẽ được xử lý.

Thật đáng tiếc khi Djabberd có tài liệu kém như hệ thống "mọi thứ của họ là một mô-đun" đã cho khả năng phụ trợ của máy chủ có thể giao tiếp trực tiếp với mạng khác. Tôi đã không thực hiện điều này.

0

Một cách tiếp cận khác là làm việc với nhà cung cấp máy chủ XMPP của bạn. Hầu hết đều có các API nội bộ giúp cho sự hiện diện của tiêm có thể từ các ứng dụng của bên thứ ba. Ví dụ: Jabber XCP cung cấp API cho điều này thực sự dễ sử dụng.

(Tiết lộ: Tôi làm việc cho Jabber, Inc, công ty đằng sau Jabber XCP)

2

Về cơ bản có hai loại máy chủ đến máy chủ (S2S) kết nối. Cái đầu tiên được gọi là cổng vào hoặc vận chuyển, nhưng chúng giống nhau. Đây có lẽ là loại bạn đang tìm kiếm. Tôi không thể tìm thấy tài liệu cụ thể cho bên không phải XMPP, nhưng cách XMPP nghĩ đến việc thực hiện các bản dịch cho máy chủ kế thừa là http://xmpp.org/extensions/xep-0100.html. Loại thứ hai thực sự không được giải thích trong bất kỳ XEP bổ sung nào - đó là các kết nối XMPP s2 thông thường. Tìm "Truyền thông Máy chủ tới Máy chủ" trong RFC 3920 hoặc RFC 3920bis để cập nhật bản nháp mới nhất.

Vì bạn có người dùng và sự hiện diện của riêng bạn trên máy chủ và không phải là XMPP, các khái niệm sẽ không ánh xạ hoàn toàn với mô hình XMPP. Đây là nơi mà công việc của phương tiện đi vào. Bạn phải làm bản dịch từ mô hình của bạn thành mô hình XMPP. Trong khi đây là một số công việc, bạn có thể đưa ra tất cả các quyết định.

Điều này mang lại cho chúng tôi một trong những lựa chọn thiết kế quan trọng - bạn cần phải quyết định những thứ bạn sẽ vẽ với XMPP từ dịch vụ của bạn và những gì bạn không làm. Các mô tả về tính năng và trường hợp sử dụng này sẽ thúc đẩy cấu trúc tổng thể. Ví dụ, điều này giống như một phương tiện để nói chuyện với AOL hoặc dịch vụ chat MSN? Sau đó, bạn sẽ cần một cách để ánh xạ tương đương với rosters, sự hiện diện và giữ thông tin phiên cùng với thông tin đăng nhập và mật khẩu từ người dùng cục bộ của bạn đến máy chủ từ xa. Điều này là do giao thông của bạn sẽ cần phải giả vờ là những người dùng đó và sẽ cần phải đăng nhập cho họ. Hoặc, có thể bạn chỉ là cầu nối s2s cho trò chơi cờ vua XMPP của người khác, vì vậy bạn không cần đăng nhập trên máy chủ từ xa và chỉ có thể hành động tương tự như máy chủ email và chuyển thông tin trở lại và ra. (Với s2s bình thường kết nối phiên duy nhất sẽ được lưu trữ sẽ được xác thực SASL được sử dụng với máy chủ từ xa, nhưng ở cấp độ người dùng s2 chỉ duy trì kết nối, và không phải là phiên đăng nhập.)

Các yếu tố khác là khả năng mở rộng và mô đun ở phía bạn. Bạn đã đóng đinh một số mối quan tâm về khả năng mở rộng. Hãy xem xét việc đưa vào nhiều phương tiện để cân bằng tải. Đối với mô đun, hãy xem nơi bạn muốn đưa ra quyết định về việc phải làm gì với mỗi gói hoặc hành động. Ví dụ: làm thế nào để bạn xử lý và theo dõi dữ liệu đăng ký? Bạn có thể đặt nó vào vận tải của bạn, nhưng sau đó làm cho việc sử dụng nhiều phương tiện vận chuyển trở nên khó khăn hơn. Hoặc nếu bạn đưa ra quyết định gần gũi hơn với máy chủ cốt lõi của mình, bạn có thể có các phương tiện vận chuyển đơn giản hơn và sử dụng một số mã phổ biến nếu bạn cần nói chuyện với các dịch vụ khác ngoài XMPP. Thương mại tắt là một máy chủ lõi phức tạp hơn với nhiều khả năng dễ bị tổn thương hơn.

2

Kiến trúc nào bạn nên sử dụng tùy thuộc vào hệ thống không phải XMPP.

  1. Bạn có vận hành hệ thống không phải XMPP không? Nếu có, bạn nên tìm cách thêm giao diện XMPP-S2S vào hệ thống đó, nói cách khác, làm cho nó hoạt động như một máy chủ XMPP. AOL đang sử dụng phương pháp này cho AIM. Thật không may, họ đã giới hạn cổng vào GoogleTalk.

  2. Bạn không vận hành hệ thống không phải XMPP nhưng có giao diện liên kết mà bạn có thể sử dụng - i. e. gateway của bạn có thể nói chuyện với hệ thống khác làm máy chủ và có không gian tên riêng. Trong trường hợp này, bạn có thể xây dựng một cổng hoạt động như một máy chủ được liên kết trên cả hai mặt. Đối với tôi không biết ví dụ về một gateway sử dụng cách tiếp cận này nhưng bạn có thể sử dụng nó nếu bạn muốn xây dựng một cầu nối XMPP-to-SIP công khai.

  3. Nếu hệ thống không phải XMPP không cung cấp cho bạn giao diện liên kết, thì bạn không có tùy chọn nào khác ngoài vai trò là một nhóm khách hàng. Trong thế giới XMPP, điều này được gọi là "vận chuyển". Sự khác biệt giữa một phương tiện giao thông và một máy chủ bình thường về cơ bản:

    • các JIDs của việc vận chuyển được ánh xạ từ một hệ thống khác -
    • (ví dụ john.doe \ [email protected] thực sự xấu xí!)
    • Người dùng XMPP muốn sử dụng phương tiện giao thông cần phải tạo tài khoản trên hệ thống không phải XMPP và cung cấp thông tin xác thực đăng nhập của tài khoản đó cho dịch vụ vận chuyển. Giao thức XMPP thậm chí còn có phần mở rộng giao thức cho phép người dùng XMPP thực hiện đăng ký vận chuyển trong băng tần.
Các vấn đề liên quan