基于https实现webSocket通信实时在web页面输出日志(两个日志输出)
来源:互联网 发布:淘宝管理团队 编辑:程序博客网 时间:2024/05/17 07:45
- 需求
- html5的webSocket简单介绍
- 客户端实现jsp页面实现
- 服务端实现
- 线程开启
- 神坑注意
需求
在同一页面输出tomcat和aserver的日志,相互之间不影响且随意切换不会出现jvm内存不足的问题。本人之前用js轮询做的,结果测试疯狂切换导致内存不足浏览器崩溃,卒。学习html5使用webSocket实现。
html5的webSocket简单介绍
页面实现一个webSocket连接
// 创建一个Socket实例var socket = new WebSocket('ws://localhost:8080');
注:如果协议为https的则需要使用wss,并且在浏览器的安全例外中添加你的项目的访问路径
// 创建一个Socket实例var socket = new WebSocket('wss://localhost:8080');
webSocket的各种用法
// 打开Socket socket.onopen = function(event) { // 发送一个初始化消息 socket.send('发送消息!'); // 监听消息 socket.onmessage = function(event) { console.log('实现监听',event); }; // 监听Socket的关闭 socket.onclose = function(event) { console.log('监听关闭',event); }; // 关闭Socket.... //socket.close() };
以及下面是用到的
onmessage事件提供了一个data属性,它可以包含消息的Body部分。消息的Body部分必须是一个字符串,可以进行序列化/反序列化操作,以便传递更多的数据。
socket.onmessage=function(event) {//对返回的消息处理 }
客户端实现(jsp页面实现)
window.onload = function() {//延时加载日志输出方法,加载完下面的全局变量后执行方法 setTimeout("alertlog2()",1000);}; var websocketServerlog; var websocketTomcatlog; var flag=false; var tomcatflag=false; //aserver日志输出 function alertlog() { //获取将要输出的位置并将其显示 var traget = document.getElementById("hiddenLog"); traget.style.display = ""; //获取主机地址及端口号,动态显示 //如: http://localhost:8083 var curWwwPath = window.document.location.href; var pathName = window.document.location.pathname; var pos = curWwwPath.indexOf(pathName); var localhostPaht = curWwwPath.substring(0, pos); // 指定websocket路径,去掉https var localhostPaht1 = localhostPaht.substring(8, localhostPaht.length); websocketServerlog = new WebSocket('wss://' + localhostPaht1 + '/serverLog'); //清空上一次输出的内容 $('#hiddenLog div').html(""); //判断另一个webSocket是否开启,如果开启则关闭 if(tomcatflag==true){ websocketTomcatlog.close(); tomcatflag=false; } //对返回的数据处理 websocketServerlog.onmessage = function(event) { flag=true; // 接收服务端的实时日志并添加到HTML页面中 $("#hiddenLog div").append(event.data); // 滚动条滚动到最低部 $("#hiddenLog").scrollTop( $("#hiddenLog div").height() - $("#hiddenLog").height()); }; } //tomcat日志输出 function alertlog2() { var traget = document.getElementById("hiddenLog"); traget.style.display = ""; var curWwwPath = window.document.location.href; var pathName = window.document.location.pathname; var pos = curWwwPath.indexOf(pathName); var localhostPaht = curWwwPath.substring(0, pos); // 指定websocket路径 var localhostPaht1 = localhostPaht.substring(8, localhostPaht.length); websocketTomcatlog = new WebSocket('wss://' + localhostPaht1 + '/tomcatLog'); $('#hiddenLog div').html(""); if(flag==true){ websocketServerlog.close(); flag=false; } websocketTomcatlog.onmessage = function(event) { tomcatflag=true; // 接收服务端的实时日志并添加到HTML页面中 $("#hiddenLog div").append(event.data); // 滚动条滚动到最低部 $("#hiddenLog").scrollTop( $("#hiddenLog div").height() - $("#hiddenLog").height()); }; }//输出区域(非js代码,html代码)可自行调整<!-- 隐藏日志 --> <div id="hiddenLog" class="hiddenLog" style="min-height: 300px; overflow-y: auto; max-height: 500px; display: none; padding-left: 30px"> <div></div> </div>
服务端实现
tomcat日志
package com.yx.web.webSocket;import java.io.IOException;import java.io.InputStream;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/tomcatLog")public class LogWebSocketHandle { private Process process; private InputStream inputStream; /** * 新的WebSocket请求开启 */ @OnOpen public void onOpen(Session session) { try { // 执行tail -f命令 //如果非root启动liunux注意权限问题 //路径改为自己的日志文件路径 process = Runtime.getRuntime().exec("tail -f /work/weblogs/catalina.out"); inputStream = process.getInputStream(); // 一定要启动新的线程,防止InputStream阻塞处理WebSocket的线程 TailLogThread thread = new TailLogThread(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(); }}
aserver同上注意访问路径,及输出的路径问题
线程开启
package com.yx.web.webSocket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import javax.websocket.Session;public class TailLogThread extends Thread { private BufferedReader reader; private Session session; public TailLogThread(InputStream in, Session session) { this.reader = new BufferedReader(new InputStreamReader(in)); this.session = session; } @Override public void run() { String line; try { while((line = reader.readLine()) != null) { // 将实时日志通过WebSocket发送给客户端,给每一行添加一个HTML换行 session.getBasicRemote().sendText(line + "<br>"); } } catch (IOException e) { e.printStackTrace(); } }}
神坑注意
如果设置了各种过滤器,控制台报错连接不上时,请注意自己的过滤器是否把请求拦截了
0 0
- 基于https实现webSocket通信实时在web页面输出日志(两个日志输出)
- spring boot集成WebSocket实时输出日志到web页面
- Java用webSocket实现tomcat的日志实时输出到web页面
- java用webSocket实现tomcat的日志实时输出到web页面______软件开发-JAVA
- Java用webSocket实现tomcat的日志实时输出到web页面
- Java用webSocket实现tomcat的日志实时输出到web页面
- Java用webSocket实现tomcat的日志实时输出到web页面
- Java使用WebSocket监控Tomcat日志catalina.out实时输出到Web页面
- 基于 websocket 实现远程实时日志 在浏览器中查看设备的运行日志
- 使用spring websocket实时读取k8s容器日志输出
- Java用WebSocket + tail命令实现Web实时日志
- Java用WebSocket + tail命令实现Web实时日志(转)
- TestNG实现日志输出
- socket、websocket后台信息日志输出使用
- websocket 实现服务器日志实时反馈(linux 环境)
- logcat 实时输出日志到文件(logcat输出日志到文件)
- 基于Saltstatck实现页面实时显示tomcat启动日志(17)
- Java实时监控日志文件并输出
- 向大家推荐一个好用的 内存清理及内存工具类
- Java线程详解
- python基础知识之元组
- Javascript倒计时效果
- 感兴趣区域的定义
- 基于https实现webSocket通信实时在web页面输出日志(两个日志输出)
- 14.2 Swift析构方法的自动继承
- 框架 day78 涛涛商城项目-CMS内容管理,httpclient使用,首页ad展示
- 上传文件的input框的change时间只能触发一次的原因
- shell脚本
- cocos2dx 3.12 各平台资源加密解密
- 用远程桌面登陆服务器 自动输入字母c
- 解决SSO客户端验证错误String index out of range
- jface databinding/PojoBindable实现对POJO对象的支持