2009-09-20 46 views
11

Tôi đã nghe nói về Giao diện ổ cắm web trong thông số tệp HTML từ một câu hỏi có liên quan here.
Nghe có vẻ rất hứa hẹn!
Tôi không hiểu nó hoạt động như thế nào mà nó vẫn sử dụng giao thức HTTP và làm việc xung quanh nó hay nó hoạt động giống như TCP socket?Giao diện cổng web HTML5 hoạt động như thế nào?

Trả lời

2

Giao thức Web Socket là giao thức dựa trên TCP, nhưng nó được thiết kế để hạ cấp xuống HTTP. Cũng có một cái bắt tay HTTP yêu cầu máy chủ nâng cấp lên giao thức Web Sockets. Vì vậy, nếu máy chủ hỗ trợ nó, thì một kết nối TCP song công sẽ được sử dụng, nếu không thì hãy sử dụng HTTP và Comet hacks cho điều đó.

+0

Lần cuối cùng tôi nhìn thấy thông số giao thức WebSocket, không có cách nào để tự động hạ cấp xuống HTTP. Nó được thêm vào đâu? – EricLaw

+0

WebSockets (sử dụng để?) Hỗ trợ NTP, một giao thức đóng cửa trong những năm 80. – Christian

7

Nó không phải là HTTP, cũng không phải là ổ cắm TCP đồng bằng. Nó được thiết kế để có được chi phí thấp của các kết nối ổ cắm thông thường (AJAX/COMET có chi phí rất cao), nhưng không hy sinh một số nguyên tắc bảo mật của trình duyệt đã được phát triển trong vài năm qua.

Bắt tay WebSockets ban đầu trông rất giống HTTP. Điều này sẽ giúp các proxy và máy chủ web hiện tại dễ dàng hơn hỗ trợ các kết nối WebSockets đến và thực hiện đúng với chúng (tức là chuyển tiếp chúng tới trình xử lý thực). Nhưng sau khi bắt tay thành công (bao gồm trao đổi và xác nhận thông tin nguồn gốc), kết nối vẫn mở và trở thành hai chiều.

Mỗi gói dữ liệu (cho dù được gửi từ máy chủ hoặc từ máy khách) bắt đầu bằng '\ x00' (zero byte), được theo sau bởi dữ liệu được mã hóa UTF-8 và kết thúc bằng '\ xff' (tất cả các byte đó).

Dự thảo tiêu chuẩn hiện nay là ở đây: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76

Bạn cũng có thể tìm ra wsproxy trong noVNC được sử dụng như một tài liệu tham khảo. wsproxy là một WebSockets chung cho proxy cổng TCP. Có cả phiên bản C và python của wsproxy kèm theo noVNC.

http://github.com/kanaka/noVNC/tree/master/utils/

22

Nói cách khác, nó là cả một yêu cầu HTTP và một socket TCP thông thường.

Kết nối websocket được yêu cầu bằng cách sử dụng yêu cầu HTTP bình thường trên TCP. Có một số tiêu đề được gửi cho biết với máy chủ web rằng đó là một websocket đang được yêu cầu và không phải là một trang bình thường, nhưng về cơ bản nó chỉ là một yêu cầu HTTP.

Sau khi phản hồi được gửi từ máy chủ, kết nối sẽ được nâng cấp. Có nghĩa là, kết nối TCP đang được sử dụng cho HTTP bị chiếm đoạt vì một cuộc gọi cao hơn: hai chiều, truyền dữ liệu theo thời gian thực.

Khi bạn có khả năng giao tiếp hai chiều và hiệu quả (đó là chiến thắng chính trên sao chổi), các chân trời của nhà phát triển được tăng lên đáng kể. Đột nhiên, những thứ như trò chơi MMO và cộng tác trong thời gian thực, điều đó không thể chỉ sử dụng công nghệ web, trở thành có thể.

+0

Câu hỏi: chính xác như yêu cầu mở http và giữ nó mở? (giống như sao chổi dài bỏ phiếu ...)? hoặc có một cái gì đó khác biệt –

+0

@RoyiNamir, Có, giống hệt nhau, cung cấp hoặc lấy một vài tiêu đề, ngoại trừ việc bạn không phải mở một kết nối mới mỗi khi bạn muốn gửi hoặc nhận một cái gì đó. –

+0

Cảm ơn. vì vậy nó thực sự đẩy mạnh .... đúng không? (và không trả lời yêu cầu ...) –

0

Trong một tình huống như vậy vai trò của máy chủ hoạt động khi: (. 2 chiều comm)

Trong HTML 5, WebSocket như một fone không walky-TALKY. Giao thức HTTP được nâng cấp lên giao thức websocket. (wss:// from ws://) SERVER sẽ có thể mở kênh song công và do đó AGREE với giao tiếp song công. Cũng xin đi qua liên kết này: http://www.html5rocks.com/en/tutorials/websockets/basics/

Cảm ơn.

Các vấn đề liên quan