Xmpp Vs Websocket [đã đóng]


88

Tôi sắp phát triển một trang web có tính năng trò chuyện gần như thời gian thực. Tôi biết rằng nó có thể được triển khai bằng giao thức xmpp hoặc websocket. Tôi cũng biết rằng giao thức xmpp đã được phát triển vào năm 1999 và tôi đoán rằng ngày nay nó sẽ hoàn thiện. Mặt khác, giao thức websocket đã được phát triển vào năm 2011.

  1. Sự cần thiết của websocket là gì nếu xmpp xử lý tốt các cuộc trò chuyện thời gian thực?
  2. Sự khác biệt chính giữa 2 giao thức là gì?
  3. Và khi nào tôi nên chọn một trong số chúng hơn các lựa chọn khác?

1
Gần đây tôi tình cờ gặp vấn đề tương tự, câu trả lời của tôi là dành cho WebSockets. Node.JS đang trở thành một ngôn ngữ cực kỳ phổ biến và nó phải như vậy. XMPP là ok - tuy nhiên theo ý kiến ​​của tôi, bạn đang tự giới hạn bản thân khi quyết định sử dụng công nghệ cũ hơn này. Tuy nhiên, Node là một con thú khó khăn và bạn phải tiếp cận nó theo cách khác với cách bạn sử dụng JavaScript. Nếu bạn đủ kiên nhẫn, tôi khuyên bạn nên sử dụng Node - không chỉ cho điều này, mà nó sẽ cho phép bạn mở rộng sang các lĩnh vực khác dễ dàng hơn.
JustSteveKing

7
XMPP là Giao thức hiện diện và nhắn tin có thể mở rộng, Websocket là giao thức cung cấp truyền thông song công đầy đủ qua Cổng 80. Bạn so sánh Táo với Cam.
Dòng chảy

16
@Flow: Tôi có thể đang so sánh táo với cam theo ý kiến ​​của bạn. Nhưng điều tôi đang hỏi là tôi nên chọn cái nào khi phát triển một trang web cung cấp khả năng trò chuyện thời gian thực.
Khafaga

1
@JustSteveKing Hầu hết mọi thứ đã được thực hiện trong XMPP tuy nhiên bạn phải quản lý những thứ đó trong node.js. Điều này tương đương với việc phát minh lại bánh xe.
Shahid Karimi,

Câu trả lời:


133

Câu trả lời ngắn gọn là 'cả hai'.

XMPP là một tập hợp các giao thức ứng dụng để thực hiện trò chuyện thời gian thực (và nhiều thứ khác, cho vấn đề đó) - sau đó nó phải được truyền tải qua mạng bằng cách nào đó, vì vậy bạn cần một ràng buộc truyền tải. Có ba ràng buộc truyền tải chính cho XMPP -

  1. TCP / IP, là những gì người ta thường sử dụng trên Internet với các máy khách gốc trên thiết bị
  2. HTTP (được gọi là BOSH), là thứ thường được sử dụng khi sử dụng XMPP trong trình duyệt (vì TCP-IP không khả dụng với các ứng dụng Javascript trong trình duyệt)
  3. Websockets, là một trong những sử dụng khi thực hiện XMPP trong một trình duyệt hiện đại.

Vì vậy, nếu bạn đang phát triển ứng dụng trò chuyện trong trình duyệt, bạn sẽ chọn XMPP làm giao thức ứng dụng và bạn sẽ sử dụng websockets (trong trình duyệt hiện đại) hoặc BOSH (trong trình duyệt cũ hơn) làm mạng truyền tải. Nếu bạn sử dụng thư viện XMPP cho Javascript như Stanza.io ( https://github.com/otalk/stanza.io ), nó sẽ hỗ trợ cả hai và bạn sẽ chỉ nghĩ về 'XMPP' thay vì lớp truyền tải, khác với lúc thiết lập khi bạn phải cho nó biết điểm cuối nào để kết nối.

(Bạn không thể sử dụng 'chỉ websockets' để trò chuyện - bạn có thể sử dụng websockets mà không cần XMPP, nhưng điều này thực sự có nghĩa là bạn đang phát minh ra giao thức tầng ứng dụng của riêng mình để trò chuyện và tỷ lệ cược là bạn sẽ tiết kiệm được tốn nhiều thời gian và đau đầu bằng cách tận dụng công việc đã đi vào viết một tài liệu có các thuộc tính hữu ích (bảo mật, danh tính, khả năng mở rộng, v.v.) và các thư viện và máy chủ hiện có bằng cách sử dụng XMPP.)


1
Xin chào, các câu hỏi đã được đặt ra một thời gian, tôi chỉ tự hỏi, vậy nó có nghĩa là vận chuyển ràng buộc giống như socket.io/strophe.js và xmpp giống như (openfire / Ejabbered)?
John

1
Không, những gì bạn đang đặt tên có thư viện so với máy chủ.
Kev

Đây là thông tin thêm về các lớp (bao gồm cả giao thông vận tải, các lớp ứng dụng): en.wikipedia.org/wiki/OSI_model
Karina Klinkevičiūtė

2
câu trả lời tốt từ Kev nhưng có thể đáng để chỉ ra 1> TCP thuộc lớp 4 - lớp truyền tải trong khi cả HTTP và Websocket đều thuộc lớp 7 - lớp ứng dụng.
Gob00st

Thật vậy @ Gob00st - Tôi cũng bối rối ở đây. Câu trả lời này từ Kev cho biết "cả hai" bởi vì "bạn sẽ sử dụng websockets (trong trình duyệt hiện đại) ... làm mạng truyền tải " . Nhưng làm thế nào để chúng ta dung hòa điều đó với thực tế rằng WebSocket (như XMPP và HTTP) thực sự là các giao thức ứng dụng ( không phải giao thức truyền tải) trong OSI lớp 7? Tại sao XMPP lại "vượt lên trên" WebSockets trong một trình duyệt hiện đại?
Amelio Vazquez-Reina
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.