websocket前台实现代码,保存为html执行就好

html代码来自:https://blog.csdn.net/M348915654/article/details/53616837

<html>
<head>
<meta charset="utf-8">
<title>WebSoket Demo</title>
<script type="text/JavaScript">
// tips: WebSocket 调试脚本
var WebSocket = WebSocket || window.WebSocket || window.MozWebSocket;
// 验证浏览器是否支持WebSocket协议
if (!WebSocket) {
alert("WebSocket not supported by this browser!");
}
else {
var g_ws = null; function Display() {
// 载入上次记录的数据 //...
console.log("websocket 测试");
} var log = function (s) {
if (document.readyState !== "complete") {
log.buffer.push(s);
} else {
document.getElementById("contentId").value = (s + "\n") + document.getElementById("contentId").value
}
} function CreateConnect () {
var msg = document.getElementById("wsUrlId");
console.log("CreateConnect(), url: " + msg.value);
if (g_ws == null) {
var wsUrlValue = msg.value; try {
g_ws = new WebSocket(wsUrlValue);
// 监听消息
g_ws.onmessage = function (event) {
//valueLabel.innerHTML+ = event.data;
log("onmessage(), 接收到服务器消息: " + event.data);
};
// 打开 WebSocket
g_ws.onclose = function (event) {
//WebSocket Status:: Socket Closed
log("onclose(), Socket 已关闭!");
g_ws = null;
};
// 打开WebSocket
g_ws.onopen = function (event) {
//WebSocket Status:: Socket Open
// 发送一个初始化消息
// g_ws.send("Hello, Server!");
log("onopen(), Socket 连接成功!");
};
g_ws.onerror = function (event) {
//WebSocket Status:: Error was reported
log("onerror(), Socket 发生错误!");
};
}
catch (e) {
g_ws = null;
log("连接异常, 重置 websocket");
}
}
} function SendMsg() {
var msg = document.getElementById("messageId");
console.log("SendMsg(), msg: " + msg.value);
if (g_ws != null) {
//alert(msg.value);
log("发送 Socket 消息: " + msg.value);
g_ws.send(msg.value);
}
else {
log("Socket 还未创建!, msg: " + msg.value);
}
} function CloseConnect () {
console.log("CloseConnect()");
if (g_ws != null) {
g_ws.close();
}
}
}
</script>
</head> <body onload="Display()">
<div id="valueLabel"></div>
<textarea rows="20" cols="30" id="contentId"></textarea>
<br/>
<input name="wsUrl" id="wsUrlId" value="ws://localhost:8888/websocket"/>
<button id="createButton" onClick="javascript:CreateConnect()">Create</button>
<button id="closeButton" onClick="javascript:CloseConnect()">Close</button>
<br/>
<input name="message" id="messageId" value="Hello, Server!"/>
<button id="sendButton" onClick="javascript:SendMsg()">Send</button>
</body>
</html>

方法一

配置:

/**
* webSocket 方法一
*/
@Configuration
@ConditionalOnWebApplication
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}

实现:

/**
* webSocket 方法一
*/
@Slf4j
@ServerEndpoint(value = "/websocket")
@Component
public class WebSocketServer {
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session) { } /**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
webSocketSet.remove(this); //从set中删除 } /**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
*/
@OnMessage
public void onMessage(String message, Session session) { } /**
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) { }
}

方法二:

配置

/**
* webSocket方法二
* @author tongxiabin
*/
@Component
@EnableWebMvc
@EnableWebSocket
public class WebSocketConfig2 implements WebSocketConfigurer { @Resource
private MyWebSocketHandler handler; @Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(handler, "/wsMy").addInterceptors(new HandshakeInterceptor() {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
System.out.println("registerWebSocketHandlers-beforeHandshake");
serverHttpResponse.setStatusCode(HttpStatus.OK);
return true;
} @Override
public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
System.out.println("registerWebSocketHandlers-afterHandshake");
}
}).setAllowedOrigins("*");
}
}

实现:

/**
* webSocket 方法二
*/
@Component
public class MyWebSocketHandler implements WebSocketHandler { private static final Map<String ,WebSocketSession> userMap=new HashMap<>();
@Override
public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
String jspCode = (String )webSocketSession.getAttributes().get("jspCode"); if(userMap.get(jspCode)==null){
System.out.println(jspCode);
userMap.put(jspCode,webSocketSession);
}
} @Override
public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
System.out.println("handleMessage");
} @Override
public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
System.out.println("handleTransportError");
} @Override
public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
System.out.println("afterConnectionClosed");
} @Override
public boolean supportsPartialMessages() {
return false;
}
}

spring boot 下websocket实现的两种方法的更多相关文章

  1. spring boot 用@CONFIGURATIONPROPERTIES 和 @Configuration两种方法读取配置文件

    spring cloud  读取 配置文件属性值 1.bean @Data public class LocalFileConfig { /** * 文件存储地址 */ private String ...

  2. spring boot 解决 跨域 的两种方法 -- 前后端分离

    1.前言 以前做项目 ,基本上是使用 MVC 模式 ,使得视图与模型绑定 ,前后端地址与端口都一样 , 但是现在有些需求 ,需要暴露给外网访问 ,那么这就出现了个跨域问题 ,与同源原则冲突, 造成访问 ...

  3. Spring Boot定义系统启动任务的两种方式

    Spring Boot定义系统启动任务的两种方式 概述 如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web ...

  4. Linux 下操作GPIO(两种方法,驱动和mmap)(转载)

    目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...

  5. Linux 下操作gpio(两种方法,驱动和mmap)

    目前我所知道的在linux下操作GPIO有两种方法: 1.  编写驱动,这当然要熟悉linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据 ...

  6. 20155212 C语言实现linux下pwd命令的两种方法

    20155212 C语言实现linux下pwd命令的两种方法 学习pwd命令 通过man pwd命令查看 pwd [OPTION],一般不加参数 -P显示当前目录的物理路径 -L显示当前目录的连接路径 ...

  7. 创建一个 Spring Boot 项目,你会几种方法?

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...

  8. spring boot下WebSocket消息推送(转)

    原文地址:https://www.cnblogs.com/betterboyz/p/8669879.html WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.W ...

  9. spring boot下WebSocket消息推送

    WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSo ...

随机推荐

  1. python 函数和方法的区别

    一.函数和方法的区别 1.函数要手动传self,方法不用传 2.如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用 举例说明: class Foo(object): def __init__ ...

  2. 问题:oracle CLOB类型;结果:oracle中Blob和Clob类型的区别

    BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图 ...

  3. Solr5.5.3的研究之路 ---1、从Mysql导入数据并创建索引

    公司需要用到全文检索,故使用Solr,也是新人一枚,本人查看的前提是Solr已经安装部署成功,我用的服务器是自带的Jetty 1.创建Collection [root@whoami bin]# ./s ...

  4. C程序设计语言(K&R) 笔记1

    当作复习... (1)将华氏度 换算成 摄氏度,公式: ℃=(5/9)(̧°F-32) #include <stdio.h> int transformTemprature(int F){ ...

  5. Caused by: java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor

    Bitmap bmp =BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); Paint paint = new ...

  6. od命令 查看二进制文件

    od命令用于输出文件的八进制.十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符. 以数值进制格式输出:od [选项] 文件 od   -d 文件       --十进制输 ...

  7. solr的copyFeild用法(改变各个feild的权重,修改打分结果)-注意!

    copyField的dest字段all本身有分析器处理:假设为mmseg4j name,title,description三个字段都复制到all字段上:其中title和description都是mms ...

  8. iOS UITableView制作类似QQ好友列表视图

                #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDele ...

  9. ROS Learning-015 learning_tf(编程) 编写一个监听器程序 (Python版)

    ROS Indigo learning_tf-02 编写一个 监听器 程序 (Python版) 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 1 ...

  10. bzoj5450 轰炸

    传送门 分析 不难想到如果这个图是一个DAG则答案就是图的最长路 于是我们考虑有环的情况 我们发现一个环上的所有点颜色一定不相同 于是我们发现答案就是缩点之后跑一遍点权最长路 点权就是这个强联通分量中 ...