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 -
- 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ị
- 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)
- 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.)