我正在开发一个带有AngularJS的Yii2 REST API,供前端使用。
我需要一种方法来实现实时方法,例如聊天,或者进行一些实时通知。
这是可能的吗,如何实现?我一直在读有关Ratchet、Socket.io和其他一些东西的文章,但我不知道如何让它们适合休息,或者这是不是应该这样做。
任何建议都将不胜感激。
发布于 2015-10-03 05:00:20
这里有几个选项。
短/长轮询(使用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 }
);
}
});
对于客户端的短轮询和长轮询,您发送请求,等待获得响应,然后等待3秒,然后再次触发。
短/长轮询在服务器端的工作方式不同。短轮询将立即返回响应-无论是否发生了变化。长轮询,您保持连接打开,当有更改时,然后返回数据。注意不要打开太多的连接。
Socket.io (websockets)
我建议你在自己的web服务器上使用像node.js这样的东西来实现websockets,或者使用像Firebase这样的托管解决方案。
Firebase的特点是,您可以从PHP向firebase服务器上的REST端点发送post请求。您的javascript可以连接到该端点,并监听更改并相应地更新dom。它可能是所有实现中最简单的。
我个人不会使用PHP进行套接字编程,但这是可以做到的。
https://stackoverflow.com/questions/32595481
复制相似问题