审查视图

src/main/java/com/tianbo/analysis/controller/LogWebsockController.java 2.1 KB
朱兆平 authored
1
package com.tianbo.analysis.controller;
朱兆平 authored
2
朱兆平 authored
3
import com.tianbo.analysis.handle.IO_Log_Handle;
朱兆平 authored
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.CopyOnWriteArraySet;


@ServerEndpoint(value = "/log")
@Component
public class LogWebsockController {
    private Process process;
    private InputStream inputStream;
    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;

    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
    private static int onlineCount = 0;
    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
    private static CopyOnWriteArraySet<LogWebsockController> webSocketSet = new CopyOnWriteArraySet<LogWebsockController>();


    @OnOpen
    public void onOpen(Session session){
        this.session = session;
        webSocketSet.add(this);
        addOnlineCount();
        try {
朱兆平 authored
36
            process = Runtime.getRuntime().exec("tail -f logs/log_info.log");
朱兆平 authored
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
            inputStream = process.getInputStream();
            IO_Log_Handle thread = new IO_Log_Handle(inputStream, session);
            thread.start();

        }catch (IOException e){
            e.printStackTrace();
        }

    }
    /**
     * WebSocket请求关闭
     */
    @OnClose
    public void onClose() {
        try {
            if(inputStream != null) {
                inputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(process != null){
            process.destroy();
        }

    }

    @OnError
    public void onError(Throwable thr) {
        thr.printStackTrace();
    }

    public static synchronized void addOnlineCount() {
        LogWebsockController.onlineCount++;
    }
    public static synchronized int getOnlineCount() {
        return onlineCount;
    }


}