2015-09-15 19 views
5

Tôi đang phát triển API REST Yii2, với AngularJS cho giao diện người dùng tiêu thụ.Thời gian thực với AngularJs & Yii2

Tôi cần một cách để triển khai phương pháp tiếp cận theo thời gian thực, ví dụ: để trò chuyện hoặc thực hiện một số thông báo thời gian thực.

Điều này có thể thực hiện được không? Tôi đã đọc về Ratchet, Socket.io và một số thứ khác, nhưng tôi không thể tìm ra cách để làm cho chúng phù hợp với nhau cho REST hoặc nếu đây là con đường để đi.

Mọi lời khuyên sẽ được đánh giá cao.

+3

API REST giao tiếp qua giao tiếp HTTP và thời gian thực thường được thực hiện qua WebSockets (với các hạn chế đối với HTTP, nhưng được minh bạch trong các khung công tác tốt như Socket.io). Hai cơ bản là khác nhau. Điều đó đang được nói, không có lý do gì mà bạn không thể có các điểm cuối HTTP REST và điểm cuối WebSockets trong cùng một ứng dụng. –

+0

Vì vậy, có thể có cùng một API REST trên _ ** "tài nguyên websocket" ** _ không? Làm thế nào để? – arosgab

+0

Một API REST theo quy ước sử dụng các phương thức yêu cầu HTTP ('POST' /' PUT'/'DELETE' /' PATCH') để xác định loại hoạt động được yêu cầu (đọc/ghi/xóa/cập nhật). Điều này tất nhiên không áp dụng cho WS. Bạn có thể viết một trình nghe WS mà chấp nhận các sự kiện chứa một thuộc tính "type" hoặc "method", và hoạt động trên các thực thể. Lưu ý rằng thiết kế này vi phạm kiến ​​trúc REST theo nhiều cách, và khó sử dụng hơn từ góc độ khách hàng. –

Trả lời

0

Bạn có một vài tùy chọn tại đây.

ngắn/dài Polling (sử dụng setTimeout)

app.controller("MyController", function($scope, $timeout, $http) { 
    $scope.messages = []; 

    $timeout(callAtTimeout, 3000); 

    function callAtTimeout() { 
     console.log("Timeout occurred"); 
     $http.get('PATH TO RESOURCE TO GET NEW MESSAGES').then(
      function(res) { // update $scope.messages etc... }, 
      function(err) { // handle error } 
     ); 
    } 
}); 

Đối với cả hai bỏ phiếu ngắn hạn và dài về phía khách hàng, bạn gửi yêu cầu, chờ đợi để có được một phản ứng trở lại, sau đó chờ 3 giây và lửa một lần nữa.

Bỏ phiếu ngắn/dài hoạt động khác nhau ở phía máy chủ. Việc bỏ phiếu ngắn sẽ chỉ trả lại phản hồi ngay lập tức - cho dù có điều gì đó đã thay đổi hay không. Bỏ phiếu dài, bạn giữ kết nối mở và khi có thay đổi, sau đó bạn trả lại dữ liệu. Cẩn thận với việc giữ quá nhiều kết nối mở.

Socket.io (WebSockets)

tôi sẽ khuyên bạn nên thực hiện bằng cách sử dụng WebSockets cái gì đó như Node.js trên máy chủ web của riêng bạn hoặc một giải pháp lưu trữ như căn cứ hỏa lực.

Điều với Firebase là từ PHP, bạn có thể gửi yêu cầu đăng bài đến điểm cuối REST trên máy chủ Firebase. Javascript của bạn có thể kết nối với điểm cuối đó và lắng nghe những thay đổi và cập nhật các dom cho phù hợp. Nó có thể là đơn giản nhất để thực hiện.

Cá nhân tôi không sử dụng PHP để lập trình socket nhưng có thể thực hiện được.

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