2012-01-03 36 views
6

Tôi ngạc nhiên rằng tôi không thể tìm thấy bất kỳ câu hỏi nào về vấn đề này. Làm thế nào để bạn thực hiện REST trên WebSockets thống nhất? Tôi đang xây dựng một ứng dụng web và muốn sử dụng websockets trên các cuộc gọi ajax.Sử dụng socket.io làm api

Trước tiên, bạn đại diện cho URI như thế nào? Thứ hai, làm thế nào để bạn đại diện cho các phương thức HTTP (GET, PUT, POST,…)?

socket.emit('set', ...) 
socket.emit('get', ...) 
socket.emit('delete', ...) 

Trả lời

9

Điều này không có ý nghĩa. Toàn bộ điểm của việc sử dụng WebSockets là bỏ qua chi phí được áp đặt bằng cách thực hiện các yêu cầu HTTP. Bạn muốn triển khai lại HTTP trên đầu phát trực tuyến HTTP.

Trong hầu hết các trường hợp, nó sẽ thực sự gây ra nhiều chi phí hơn, vì nếu máy khách không hỗ trợ WebSockets hoặc ổ cắm Flash, nó sẽ quay trở lại trạng thái bỏ phiếu dài HTTP. Điều đó có nghĩa là bạn có yêu cầu HTTP giả và yêu cầu HTTP thực tế phân phối dữ liệu.

Nếu bạn muốn xây dựng một ứng dụng RESTful, hãy sử dụng HTTP.

Nếu bạn muốn xây dựng một ứng dụng hướng sự kiện, hãy sử dụng WebSockets.

Sử dụng đúng công cụ cho công việc.

+1

Tôi sẽ sử dụng websockets trên trang anyways cho nội dung thời gian thực – sdfadfaasd

10

Liên kết này có thể mô tả những gì bạn đang cố gắng để làm:

How can Socket.io and RESTFul work together?

Nó không phải sai lầm khi muốn có thông điệp như GET, SET, DELETE. Việc sử dụng lại cấu trúc API hiện tại của bạn không phải là sai - bạn vẫn cần định tuyến và URI có thể được phân tích cú pháp bằng định tuyến của bạn ở phía máy chủ để tương ứng với bộ điều khiển cho GET/SET/DELETE.

ví dụ:

socket.emit('set', {uri: 'https://stackoverflow.com/questions/6339393/how-can-socket-io-and-restful-work-together', params: {someKey: "someValue}). 

này không tận dụng những gì WebSockets làm tốt - giao tiếp hai chiều, nhưng nó cho phép cho các yêu cầu trực tuyến, mà có lẽ sẽ nhanh hơn tùy thuộc vào mức độ thường xuyên bạn bình chọn dữ liệu của bạn.

Chúc bạn may mắn và vui chơi!

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