2011-06-23 37 views
6

Tôi vừa mới bắt đầu nghiên cứu HTML5 WebSockets. Tôi đã tự hỏi liệu tôi có thể cập nhật tất cả nội dung của trang web bằng websockets thay vì sử dụng ASP.NET UpdatePanels hay điều này có thể quá mức không?Tôi có thể sử dụng các WebSockets HTML5 cho các tác vụ thường được thực hiện bằng AJAX không?

WebSockets có thể được sử dụng để thay thế cho AJAX không? Và đây là những gì WebSockets nên được sử dụng cho?

Hầu hết các ví dụ là dành cho các bản trình diễn giống như trò chuyện hai hướng. Nhưng nếu tôi muốn bấm vào một nút và không postback để cập nhật một lưới, tôi có thể làm điều này với WebSockets và đó sẽ là một ý tưởng tốt?

Trả lời

0

Nếu bạn muốn sử dụng WebSockets trong trang mà IE8 sẽ có thể xem, hãy sử dụng Ajax để thay thế.

WebSockets ban đầu được thiết kế để liên lạc hai chiều nhanh giữa máy khách và máy chủ. Điều quan trọng là phải có điều này cho các trò chơi phát triển mạnh trong trình duyệt, nhưng việc triển khai phía máy chủ chưa được chuẩn hóa đầy đủ - có thể có các biến chứng bảo mật hơn nữa.

Hiện tại, WebSockets chỉ được sử dụng để triển khai đồ chơi. Họ không phải là khách hàng đã sẵn sàng. Ngoài ra, chúng thực sự chỉ cần thiết khi Ajax gọi Cuộc gọi Comet quá chậm đối với nhu cầu của bạn.

+0

Bằng cách thêm [web-socket-js] (https://github.com/gimite/web-socket-js) (Flash dựa trên polyfill/dự phòng) vào ứng dụng của bạn, bạn có thể hỗ trợ bất kỳ trình duyệt nào có Flash. Kết hợp với thực tế là iOS hỗ trợ WebSockets nguyên bản và làm cho WebSockets có sẵn trên tất cả các trình duyệt chính trong tự nhiên. Có rất nhiều máy chủ WebSockets và hầu hết hỗ trợ tất cả các phiên bản giao thức có trong trình duyệt. Ngoài ra, "đồ chơi" là gây hiểu lầm. Trong khi đúng là hầu hết các WebSockets sử dụng là tương đối mới và đang phát triển, chắc chắn có các ứng dụng của nó là chất lượng sản xuất. – kanaka

0

Về mặt kỹ thuật, có. Thực tế, tôi có thể chờ đợi.

Websockets chắc chắn là cách HTML5 thực hiện loại giao tiếp mà chúng tôi đang sử dụng. Về mặt kỹ thuật, có bạn có thể, nhưng tùy thuộc vào loại trang web bạn đang xây dựng, bạn có thể muốn giữ lại. Websockets là một trong những phần mới của thông số HTML5 và vẫn đang được hoàn thiện. Nó hoạt động trong các phiên bản mới nhất của Chrome và Firefox 4, nhưng IE9 chưa thực hiện điều này, và không có từ nào nếu IE10 cũng có nó. Các trang web kỹ thuật thể hiện công nghệ mới nhất (như giới thiệu những gì có thể trong HTML5) và bất kỳ thứ gì khác mà phần lớn khán giả sẽ được đảm bảo sử dụng trình duyệt hỗ trợ hoặc những người dùng đầu tiên sẽ ổn. Nếu không, bạn có thể xa lánh một số người dùng. Chỉ có bạn mới có thể quyết định nên đi đường nào.

Chìa khóa ở đây là Websockets là một thông số thay đổi hiện tại và AJAX hoạt động trong cả trình duyệt cũ và mới. Nếu bạn muốn tương thích ngược ngoài việc bảo đảm thông số và trình duyệt sẽ không thay đổi vào ngày mai và phá vỡ mã hiện có của bạn, hãy sử dụng AJAX. Nếu bạn thấy thú vị với khả năng hiển thị thông số và trình duyệt có thể thay đổi trong tương lai và không quan tâm đến những người sử dụng các trình duyệt cũ hơn, thì hãy sử dụng các ổ cắm web.

Another stackoverflow answer shows websocket support:

  • Chrome 4.0 hỗ trợ Websockets.
  • Safari 5.0.2 cũng hỗ trợ chúng
  • Firefox 4.0 được hỗ trợ cho WebSockets bị vô hiệu hóa. để kích hoạt nó thấy
  • Opera 11 tàu với sự hỗ trợ vô hiệu hóa để kích hoạt lại nó thấy
  • IE9 không hỗ trợ họ, tuy nhiên một add-on cung cấp hỗ trợ thực nghiệm
+0

API WebSocket (là một tiêu chuẩn riêng biệt từ chính giao thức và cũng không phải là một phần kỹ thuật của HTML5) không có khả năng thay đổi theo các cách không tương thích ngược. Giao thức WebSocket cho phép các máy chủ được viết hỗ trợ nhiều phiên bản của giao thức và hầu hết đều làm. Giờ đây, iOS hỗ trợ WebSockets. Ngoài ra, [web-socket-js] (https://github.com/gimite/web-socket-js) là một polyfill/dự phòng dựa trên Flash. Điều này có nghĩa là hỗ trợ trình duyệt đã gần như phổ biến rồi. – kanaka

2

Các tiêu chuẩn WebSocket được thiết kế cho các ứng dụng cần độ trễ thấp, thông tin chi phí thấp. Chúng rất tốt cho các ứng dụng hiện có đang đẩy giới hạn của những gì có thể với AJAX/Comet/long-poll. Nhưng quan trọng hơn, WebSockets sẽ kích hoạt một lớp ứng dụng web hoàn toàn mới chưa tồn tại.

Trong trường hợp của bạn, có vẻ như WebSockets có thể quá mức cần thiết vì độ trễ không phải là vấn đề cốt lõi trong những gì bạn đang xây dựng. Bạn chắc chắn có thể làm điều đó với WebSockets, nhưng tôi nghi ngờ rằng sẽ có thêm công việc cho rất ít được trong trường hợp của bạn.

Xem this answer vì lý do tại sao WebSockets đã sẵn sàng để sử dụng chung (với web-socket-js và hỗ trợ iOS gốc có nghĩa là WebSockets được hỗ trợ trên khá nhiều trình duyệt trong tự nhiên).

+0

Vấn đề chính với việc sử dụng WebSockets trong kịch bản này là một chút nỗ lực có lẽ sẽ cần phải được thực hiện chỉ với một chút tăng. Trong trường hợp này, có lẽ không đáng để thêm hỗ trợ WebSocket vào IIS (Giả sử ứng dụng ASP.NET đang chạy trên IIS) hoặc thêm một máy chủ WebSocket và cơ sở hạ tầng bổ sung để cho phép ứng dụng ASP.NET nói chuyện với nó. Tôi hoàn toàn đồng ý rằng WebSockets đã sẵn sàng để sử dụng chung do hỗ trợ dự phòng. Vấn đề là thiết lập hỗ trợ WebSocket trên backend trong ** môi trường lưu trữ của riêng bạn ** là một chút đau ở thời điểm này. – leggetter

3

Tôi nghĩ XHR và WebSocket dành cho 2 trường hợp khác nhau và bạn nên sử dụng kịch bản phù hợp hơn với kịch bản của mình.

XHR có cặp yêu cầu-phản hồi. Mỗi yêu cầu được ghép nối với một phản hồi. Điều này là tốt cho các cuộc gọi thủ tục từ xa, nhưng tạo ra chi phí không cần thiết nếu bạn muốn phản ứng mà không yêu cầu (tức là đẩy máy chủ).

WebSocket giải quyết vấn đề ở trên. Bạn có thể gửi yêu cầu mà không mong đợi bất kỳ phản hồi nào. Máy chủ cũng có thể gửi cho bạn bất kỳ điều gì thông qua phản hồi mà không cần bạn bắt đầu yêu cầu trước.

Trong trường hợp nhấn nút và cập nhật nội dung (ví dụ: chỉnh sửa ô bảng), XHR (và UpdatePanel) hoạt động tốt hơn. Đó là vì việc cập nhật nội dung phải được ghép nối với một nút bấm. Đây là cặp yêu cầu-phản hồi. Nhưng trong trường hợp cập nhật nội dung thuần túy (ví dụ: hiển thị giá cổ phiếu theo thời gian thực), WebSocket hoạt động tốt hơn. Trong trường hợp cập nhật nội dung không liên quan đến việc nhấp vào nút (ví dụ: trò chuyện), WebSocket cũng hoạt động tốt hơn.

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