sprint boot websocket 服务端+html5 示例测试
包依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
配置类 WebSocketConfig.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import javax.websocket.server.ServerEndpointConfig; @Configuration
public class WebSocketConfig extends ServerEndpointConfig.Configurator { public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler(), "")
.setAllowedOrigins("*");
} public WebSocketHandler myHandler() {
return new AlarmWebSocket();
} @Bean
public ServerEndpointExporter serverEndpointExporter() {
ServerEndpointExporter serverEndpointExporter = new ServerEndpointExporter();
return serverEndpointExporter;
}
}
WebSocketTest.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.handler.TextWebSocketHandler; import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet; @ServerEndpoint(value = "/websocketOne",configurator = WebSocketConfig.class)
@Component
public class AlarmWebSocket extends TextWebSocketHandler {
public final static Logger logger = LoggerFactory.getLogger(AlarmWebSocket.class); private static int onlineCount = 0; //用来存放每个客户端对应的MyWebSocket对象。
private static CopyOnWriteArraySet<AlarmWebSocket> webSocketMap = new CopyOnWriteArraySet<AlarmWebSocket>();
private Session session; @OnOpen
public void onOpen(Session session) throws IOException {
this.session = session;
webSocketMap.add(this);
addOnlineCount(); this.sendMessage(""); // TODO: 建立连接推送到前端的数据
logger.info("create new webSocket connect!now WebSocket Client number is " + getOnlineCount());
} @OnClose
public void onClose(){ webSocketMap.remove(this);
subOnlineCount();
System.out.println("close one webSocket connect!now WebSocket Client is " + getOnlineCount()); } /**
* 收到客户端消息后调用的方法
* @param message 客户端发送过来的消息
* @param session 可选的参数
*/
@OnMessage
public void onMessage(String message, Session session) throws IOException {
System.out.println(7777); //发送的用户号就是session.hashcode(),可以再加个map继续映射
/* int pos=message.indexOf("#*#*");
String realmessage=message.substring(0,pos);
String realuser=message.substring(pos+4,message.length());*/
System.out.println("来自客户端的消息:" + message);
//
/* WebSocketTest item=webSocketMap.get(realuser);
item.sendMessage(realmessage);*/
sendMessage(message); } /**
* 群发自定义消息
*/
public static void sendInfo(String message) {
System.out.println(66666); //log.info(message); for (AlarmWebSocket item : webSocketMap) {
try {
item.sendMessage(message);
} catch (IOException e) {
//log.error("向客户端发送数据失败!", e);
//continue;
}
}
} /**
* 发生错误时调用
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error){
System.out.println("发生错误");
error.printStackTrace();
} /**
* 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
* @param message
* @throws IOException
*/
//给客户端传递消息
public void sendMessage(String message) throws IOException{ this.session.getBasicRemote().sendText(message);
//this.session.getAsyncRemote().sendText(message);
} public static synchronized int getOnlineCount() {
return onlineCount;
} public static synchronized void addOnlineCount() {
AlarmWebSocket.onlineCount++;
} public static synchronized void subOnlineCount() {
AlarmWebSocket.onlineCount--;
} }
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RevealWebSocket</title>
<script src="js/vue.js"></script>
</head>
<body>
接受数据<br/><br/>
<div id="ws">
<input id="text" type="text"/>
<button onclick="sendMsg()">Send</button>
<button onclick="closeWS()" :disabled="!opened">Close</button>
<button onclick="openWS()" :disabled="opened">Open</button>
<div v-html="msg"></div>
</div>
</body>
<script type="text/javascript">
var websocket = null;
var wsVue = new Vue({
el: '#ws',
data: {
msg: "welcome to my websocket...<br/>",
opened: false
},
mounted: function(){
initWs();
}
});
function initWs() {
//check if your browser supports WebSocket
if ('WebSocket' in window) {
//websocket = new WebSocket("ws://124.207.211.211:85/monitor/monitor/socket");
websocket = new WebSocket("ws://localhost:9001/websocketOne");
//websocket = new WebSocket("ws://192.168.1.53:9100/monitor/websocketOne");
}
else {
alert('Sorry, websocket not supported by your browser.')
}
//Error callback
websocket.onerror = function () {
setMessageContent("error!");
wsVue.opened = false;
};
//socket opened callback
websocket.onopen = function (event) {
setMessageContent("websocket opened");
wsVue.opened = true;
}
//message received callback
websocket.onmessage = function (event) {
setMessageContent(event.data);
}
//socket closed callback
websocket.onclose = function () {
setMessageContent("websocket closed");
wsVue.opened = false;
}
//when browser window closed, close the socket, to prevent server exception
window.onbeforeunload = function () {
websocket.close();
}
}
//update message to vue and then in div
function setMessageContent(content) {
wsVue.msg = content;
}
//click to close the websocket
function closeWS() {
websocket.close();
wsVue.opened = false;
}
//click to open the websocket
function openWS() {
initWs();
}
//click to send message
function sendMsg() {
var message = document.getElementById('text').value;
websocket.send(message);
}
</script>
</body>
</html>
sprint boot websocket 服务端+html5 示例测试的更多相关文章
- C# WebSocket 服务端示例代码 + HTML5客户端示例代码
WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- asp.net网站作为websocket服务端的应用该如何写
最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务.客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息. 其实,这个需求并不难,只是 ...
- Netty 搭建 WebSocket 服务端
一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...
- nodejs搭建简单的websocket服务端
创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...
- WebSocket服务端
http://blog.csdn.net/qq_20282263/article/details/54310737 C# 实现WebSocket服务端 原创 2017年01月10日 09:22:50 ...
- socket服务端开发之测试使用threading和gevent框架
socket服务端开发之测试使用threading和gevent框架 话题是测试下多线程和gevent在socket服务端的小包表现能力,测试的方法不太严谨,也没有用event loop + pool ...
- Netty搭建WebSocket服务端
Netty服务端 1.引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...
- websocket服务端开发
基于http请求以拉的方式去做服务器的推送,无论是实时性和有效字节都是差强人意的效果. 公司的im系统在与客户端的交互上实际上借助了websocket来实现服务器与客户端的事实消息推送,今天就来简单了 ...
随机推荐
- numpy中的mean()函数
本文链接:https://blog.csdn.net/lilong117194/article/details/78397329mean() 函数定义:numpy.mean(a, axis, dtyp ...
- 网络分裂 redis 集群
REDIS cluster-tutorial -- Redis中文资料站 -- Redis中国用户组(CRUG) http://www.redis.cn/topics/cluster-tutorial ...
- Python 3.8.0 final¶ Release date: 2019-10-14
https://docs.python.org/3.8/whatsnew/changelog.html#python-3-8-0 Core and Builtins bpo-38469: Fixed ...
- Spring AOP(通知、连接点、切点、切面)
一.AOP术语 通知(Advice) 切面的工作被称为通知.通知定义了切面是什么以及何时使用.除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题.5种通知类型: 前置通知(Before): ...
- AndoridSQLite数据库开发基础教程(8)
AndoridSQLite数据库开发基础教程(8) 添加索引 索引是一种通过预先排序和对表的一个或多个列构建索引表来优化数据库查找的手段.下面为表添加索引,操作步骤如下: (1)在打开的数据库中,单击 ...
- locust设置断言的方法
https://blog.csdn.net/panyu881024/article/details/80146088 这里同样以测试百度首页为例. catch_response = True :布尔类 ...
- Flink 在IDEA执行时的webui
不过Flink IDEA中执行的webui 需要 flink-runtime-web 包的支持 pom 如下: <dependency> <groupId>org.apache ...
- Swift4.0复习闭包
1.闭包的定义和调用: _ = { (param1: Int, param2: Float, param3: Void) -> return_type in // 闭包执行代码 /* ... * ...
- webpack 安装vue(两种代码模式compiler 和runtime)
使用webpack安装vue,import之后,运营项目报错,如下: [Vue warn]: You are using the runtime-only build of Vue where the ...
- node.js http-server 搭建本地服务器
使用vue-cli创建的项目,能够实现浏览器中自动刷新,实时查看项目效果,其中的原理在于,webpack在本地启动了一个本地服务器,将本机当作一台服务器: 打包后的文件是一个html静态页面,在本地文 ...