与AngularJs和Yii2的实时

aro*_*gab 6 rest real-time websocket angularjs yii2

我正在开发一个Yii2 REST API,使用AngularJS供前端使用.

我需要一种方法来实现实时方法,例如聊天,或者做一些实时通知.

这有可能,如何实现?我一直在阅读有关Ratchet,Socket.io和其他一些东西的内容,但我无法弄清楚如何使它们适合REST,或者如果这样就可以了.

任何建议都会很感激.

Gra*_*avy 0

您在这里有几个选择。

短/长轮询(使用 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 }
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

对于客户端的短轮询和长轮询,您发送请求,等待返回响应,然后等待 3 秒并再次触发。

短/长轮询在服务器端的工作方式不同。短轮询只会立即返回响应 - 无论某些内容是否发生变化。长轮询,您保持连接打开,当有变化时,您返回数据。请注意不要保持过多的连接打开。

Socket.io(网络套接字)

我建议您在自己的 Web 服务器上使用 Node.js 之类的东西或 Firebase 之类的托管解决方案来实现 Websockets。

Firebase 的特点是,您可以从 PHP 向 Firebase 服务器上的 REST 端点发送发布请求。您的 JavaScript 可以连接到该端点并侦听更改并相应地更新 dom。它可能是最容易实现的。

我个人不会使用 PHP 进行套接字编程,但这是可以做到的。