SSE与angularJS和java一起使用freamwork

SSE与angularJS和java一起使用freamwork,java,angularjs,playframework-2.0,restangular,server-sent-events,Java,Angularjs,Playframework 2.0,Restangular,Server Sent Events,我是SSE的新手,所以我决定建立一个与SSE合作的网站。我在客户端angularJS中使用,并使用restAngular发出服务器请求。我的服务器端是用java编写的。我已经构建了POST、GET、DELETE请求,现在我想添加SSE。我有一个从服务器获取的对象数组。当我将对象添加到服务器时,它应该进行POST调用并在客户端更新数组,因此我决定为其创建SSE,每当此POST请求工作时,它都会工作 如何添加SSE 我为restAngular函数构建了服务: app.factory('restAng

我是SSE的新手,所以我决定建立一个与SSE合作的网站。我在客户端angularJS中使用,并使用restAngular发出服务器请求。我的服务器端是用java编写的。我已经构建了POST、GET、DELETE请求,现在我想添加SSE。我有一个从服务器获取的对象数组。当我将对象添加到服务器时,它应该进行POST调用并在客户端更新数组,因此我决定为其创建SSE,每当此POST请求工作时,它都会工作

如何添加SSE

我为restAngular函数构建了服务:

app.factory('restAngularService', function($filter, Restangular, $q) {
    var api = Restangular.all('api');
    var getCards = api.one('get');
    var deferred = $q.defer();
    return {
        getCards: function() {
            var Cards = [];
            if (getCards.get()) {
                getCards.getList().then(function(b) {
                    Cards = b.plain();
                    deferred.resolve(Cards);
                });
            } else {
                deferred.resolve([{}]);
            }

            return deferred.promise;
        },
        delCard : function(id){
            var delCard = api.one('delete',id);
            delCard.remove();
        },
        addCard : function(card){
            var addCard = api.one('post');
            addCard.post("card",card);
        },
        updateCard : function(card){
            var addCard = api.one('update');
            addCard.post("card",card);
        },
        updateStatusCard : function(id){
            var incStatus = api.one('incStatus',id);
            incStatus.put("card");
        },
        updateViewCard : function(id){
            var incStatus = api.one('incView',id);
            incStatus.put("card");
        }
    }
});
这是一个连接控制器和重语言服务的服务:

app.factory('ServiceArray',function($filter,restAngularService){

    var Cards = restAngularService.getCards();
    return{
        getCards: function() {
            return Cards;
        },
        addCard: function(card){
            restAngularService.addCard(card);
            //Cards.push(card);
            return Cards;
        },
        getCard: function(monitorName){
            return $filter('filter')(Cards, { monitorName: monitorName})[0];
        },
        updateViewCard: function(card){
            restAngularService.updateViewCard(card.id);
            return Cards;
        },
        updateStatusCard: function(card){
            if(card.status < 3){
                restAngularService.updateStatusCard(card.id);
                /*if(($filter('filter')(Cards, { monitorName: monitorName})[0]).status < 3) {
                 ($filter('filter')(Cards, {monitorName: monitorName})[0]).status++;
                 }*/
            }
            return Cards;
        },
        delCard: function(id){
            restAngularService.delCard(id);
            //Cards.splice(index, 1);
            return Cards;
        },
        upadteCard: function(card){
            var uCard = {id:card.id,monitorName:card.monitorName,monitorType:card.monitorType,monitorLevel:card.monitorLevel,monitorProdact:card.monitorProdact,monitorSystem:card.monitorSystem,monitorExplain:card.monitorExplain}
            restAngularService.updateCard(uCard);
            /*($filter('filter')(Cards, {id: card.id})[0]).monitorName = card.monitorName;
            ($filter('filter')(Cards, {id: card.id})[0]).monitorType = card.monitorType;
            ($filter('filter')(Cards, {id: card.id})[0]).monitorLevel = card.monitorLevel;
            ($filter('filter')(Cards, {id: card.id})[0]).monitorProdact = card.monitorProdact;
            ($filter('filter')(Cards, {id: card.id})[0]).monitorSystem = card.monitorSystem;
            ($filter('filter')(Cards, {id: card.id})[0]).monitorExplain = card.monitorExplain;*/
            return Cards;
        }
}
这是服务器端的一部分:

public static void addMonitorCard(String id,String dateHeader,String img,String monitorName,String monitorLevel,String monitorProdact,String monitorSystem,String monitorExplain,String monitorType,String classText,String classBtn,String text,int status,int views){
        cards.add(new monitorCard(id,dateHeader,img,monitorName,monitorLevel,monitorProdact,monitorSystem,monitorExplain,monitorType,classText,classBtn,text,status,views));
    }

public static Result addCard(){
        JsonNode requestBody = request().body().asJson();
        String id = requestBody.get("id").asText();
        String dateHeader = requestBody.get("dateHeader").asText();
        String img = requestBody.get("img").asText();
        String monitorName = requestBody.get("monitorName").asText();
        String monitorLevel = requestBody.get("monitorLevel").asText();
        String monitorProdact = requestBody.get("monitorProdact").asText();
        String monitorSystem = requestBody.get("monitorSystem").asText();
        String monitorExplain = requestBody.get("monitorExplain").asText();
        String monitorType = requestBody.get("monitorType").asText();
        String classText = requestBody.get("classText").asText();
        String classBtn = requestBody.get("classBtn").asText();
        String text = requestBody.get("text").asText();
        int status = requestBody.get("status").asInt();
        int views = requestBody.get("views").asInt();
        addMonitorCard(id,dateHeader,img,monitorName,monitorLevel,monitorProdact,monitorSystem,monitorExplain,monitorType,classText,classBtn,text,status,views);
        SSE.sendSSEMassge();
        return ok("added");
    }

 public static Result getCards()
    {
        return ok(Json.toJson(cards));
    }

SSE是由客户端浏览器保持打开状态的开放HTTP连接。因此,为了正确地实现它,您需要创建一个解决方案,其中一个事件可以立即发送到多个终端客户端

这种架构模式称为发布/订阅或发布/订阅是,它需要遵循该模式

当我以前实现SSE时,我已经将Redis用于发布/订阅部分

我写了一篇分为两部分的博客文章,介绍了如何使用Node实现SSE,希望这能让您走上正确的道路


  • 我希望这有帮助

    SSE是一个开放的HTTP连接,由客户端浏览器保持打开状态。因此,为了正确地实现它,您需要创建一个解决方案,其中一个事件可以立即发送到多个终端客户端

    这种架构模式称为发布/订阅或发布/订阅是,它需要遵循该模式

    当我以前实现SSE时,我已经将Redis用于发布/订阅部分

    我写了一篇分为两部分的博客文章,介绍了如何使用Node实现SSE,希望这能让您走上正确的道路


  • 我希望这有帮助

    什么不起作用?你是在问该怎么做,还是该怎么解决你的问题?我是在问该怎么做。我最后一个人做了……什么不管用?你是在问该怎么做,还是该怎么解决你的问题?我是在问该怎么做最后我自己做了。。。。
    public static void addMonitorCard(String id,String dateHeader,String img,String monitorName,String monitorLevel,String monitorProdact,String monitorSystem,String monitorExplain,String monitorType,String classText,String classBtn,String text,int status,int views){
            cards.add(new monitorCard(id,dateHeader,img,monitorName,monitorLevel,monitorProdact,monitorSystem,monitorExplain,monitorType,classText,classBtn,text,status,views));
        }
    
    public static Result addCard(){
            JsonNode requestBody = request().body().asJson();
            String id = requestBody.get("id").asText();
            String dateHeader = requestBody.get("dateHeader").asText();
            String img = requestBody.get("img").asText();
            String monitorName = requestBody.get("monitorName").asText();
            String monitorLevel = requestBody.get("monitorLevel").asText();
            String monitorProdact = requestBody.get("monitorProdact").asText();
            String monitorSystem = requestBody.get("monitorSystem").asText();
            String monitorExplain = requestBody.get("monitorExplain").asText();
            String monitorType = requestBody.get("monitorType").asText();
            String classText = requestBody.get("classText").asText();
            String classBtn = requestBody.get("classBtn").asText();
            String text = requestBody.get("text").asText();
            int status = requestBody.get("status").asInt();
            int views = requestBody.get("views").asInt();
            addMonitorCard(id,dateHeader,img,monitorName,monitorLevel,monitorProdact,monitorSystem,monitorExplain,monitorType,classText,classBtn,text,status,views);
            SSE.sendSSEMassge();
            return ok("added");
        }
    
     public static Result getCards()
        {
            return ok(Json.toJson(cards));
        }