【BDS-IHG&FBプロジェクト学習-01】--nginx webSocket逆エージェント構成

34581 ワード

3つの問題を解決
  • 1.nginx単純にドメイン名のエージェントをする場合の構成の解決策
  • 2.websocketにおけるjavaクラスが注入に依存できない解決策
  • 3.nginxドメイン名マッピングがwebsocketにおけるurlの構成に及ぼす影響問題の解決方法
  • nginx構成
  • jsコード
  • javaコード
  • 1.nginx単純にドメイン名のエージェントを作る場合の構成の解決方法
    2.websocketにおけるjavaクラスが注入に依存できない解決策
    3.nginxドメイン名マッピングがwebsocketにおけるurlの構成に与える影響問題の解決方法
    nginx構成
    http{
    	include       mime.types;
        default_type  application/octet-stream;
    	//  websocket     
    	//-------websocket  ----------
    	map $http_upgrade $connection_upgrade {
            default upgrade;
            ''      close;
        }
        //-------websocket  -------
    	upstream web_pools {
    	      server 127.0.0.1:8888;//      
    	    }
    		
    	
        server {
            listen       80;
            server_name  ihg-tools.bds-analytics.com;//        
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {   
    				proxy_redirect off;
    				proxy_set_header Host $host;
    				proxy_set_header X-Real-IP $remote_addr;
    				proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    				proxy_pass http://192.168.3.52:8888;//       ip,    localhost   cookie  
            }
            //  websocket     
            //-------websocket  ----------
            location /websocket {
    		
    			proxy_pass http://192.168.3.52:8888;
    			proxy_redirect    off;
    			proxy_set_header X-Real-IP $remote_addr;
    			proxy_set_header Host $host;
    			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    			proxy_http_version 1.1;
    			proxy_set_header Upgrade $http_upgrade;
    			proxy_set_header Connection $connection_upgrade;
    			proxy_set_header Origin "";
    		}
    		//-------websocket  ----------
    	}
    }
    

    jsコード
     var socket;
            $(function () {
                if(typeof(WebSocket) == "undefined") {
                    layerMsg("  ","        WebSocket");
                }else{
                    // layerMsg("  ","       WebSocket");
                    // http://211.152.47.79:8888/websocket
                    //       ,           http://www.websocket-test.com/
                    socket = new WebSocket("ws://ihg-tools.bds-analytics.com/websocket");
                    //    
                    socket.onopen = function() {
                        send2service();//      
                        window.setInterval("send2service()",1000*120);//120       
                    };
                    //      
                    socket.onmessage = function(msg) {
                        layerMsg("  ",msg.data)
                        //                    
                    };
                    //    
                    socket.onclose = function() {
                        console.log("Socket   ");
                    };
                    //       
                    socket.onerror = function() {
                        layerMsg("  ","Socket     ,          ");
                        //          
                    }
    
                }
    
            });
           function send2service() {
               socket.send("hi,i am jack!");
           }
    

    JAvaコード
    package com.bds.ihgfb.util;
    
    import cn.hutool.log.Log;
    import cn.hutool.log.LogFactory;
    import com.bds.ihgfb.model.StatusBean;
    import org.nutz.dao.Dao;
    import org.nutz.dao.Sqls;
    import org.nutz.dao.entity.Entity;
    import org.nutz.dao.impl.NutDao;
    import org.nutz.dao.impl.SimpleDataSource;
    import org.nutz.dao.sql.Sql;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Component;
    
    import javax.websocket.*;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
    import java.util.List;
    import java.util.concurrent.CopyOnWriteArraySet;
    
    /**
     * className:WebSocketServer
     * discription:
     * author:luRuiHua
     * createTime:2019-07-08 17:06
     */
    @ServerEndpoint("/websocket")
    @Component
    public class WebSocketServer {
    
        static Log log= LogFactory.get(WebSocketServer.class);
    
    
    //  websocket        ---  -------------------------
        //        ,  service    
        private static NutDao dao;
        //      ,    service   
        @Autowired
        @Qualifier("xiaohongshu")
        public void setDao(NutDao dao){
            WebSocketServer.dao = dao;
        }
    //  websocket        ---  -------------------------
    
        //    ,           。            。
        private static int onlineCount = 0;
        //concurrent      Set,            MyWebSocket  。
        private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
    
        //           ,              
        private Session session;
    
    
        /**
         *            */
        @OnOpen
        public void onOpen(Session session) {
            this.session = session;
            webSocketSet.add(this);     //  set 
            addOnlineCount();           //    1
            log.info("               " + getOnlineCount());
        }
    
        /**
         *          
         */
        @OnClose
        public void onClose() {
            webSocketSet.remove(this);  // set   
            subOnlineCount();           //    1
            log.info("      !       " + getOnlineCount());
        }
    
        /**
         *              
         *
         * @param message           */
        @OnMessage
        public void onMessage(String message, Session session) {
            log.info("         :"+session+"-----"+message);
            String s = checkXhsFail();
            //    
            for (WebSocketServer item : webSocketSet) {
                try {
                    if ("fail".equals(s)){
                        sendMessage("     ,        ");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         *
         * @param session
         * @param error
         */
        @OnError
        public void onError(Session session, Throwable error) {
            log.error("    ");
            error.printStackTrace();
        }
        /**
         *          
         */
        public void sendMessage(String message) throws IOException {
            this.session.getBasicRemote().sendText(message);
        }
    
    
    
    
        public static synchronized int getOnlineCount() {
            return onlineCount;
        }
    
        public static synchronized void addOnlineCount() {
            WebSocketServer.onlineCount++;
        }
    
        public static synchronized void subOnlineCount() {
            WebSocketServer.onlineCount--;
        }
    
        public String checkXhsFail(){
            System.out.println("*********************        *******************");
    //        Dao dao = getDao();
            //  sql  
            Sql sql = Sqls.create("select count(0) as count,status from t_note_simple_task group by status");
            //      
            sql.setCallback(Sqls.callback.entities());
            Entity<StatusBean> entity = dao.getEntity(StatusBean.class);
            sql.setEntity(entity);
            //  sql  
            dao.execute(sql);
            //      
            List<StatusBean> list = sql.getList(StatusBean.class);
            int count = 0;
    
            for (int i =0;i<list.size();i++){
                StatusBean statusBean = list.get(i);
                int status = statusBean.getStatus();
                if (status==4){
                    count = statusBean.getCount();
                }
            }
            if (count>=1){
                System.out.println("》》  《《");
                return "fail";//    4,    
            }else {
                return "suc";
            }
        }
    
       
    
    }