SpringBoot中使用Websocket进行消息推送
WebsocketConfig.java
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
WebsocketServer.java
@Log4j
@Component
@ServerEndpoint("/websocket/{id}")
public class WebsocketServer {
private static Map<String, Session> connections = new HashMap<>();
private Session session;
@OnOpen
public void onOpen(Session session, @PathParam("id") String id) {
this.session = session;
connections.put(id, session);
}
@OnMessage
public void onMessage(String text){
log.info("WebSocket连接数:" + connections.size());
String[] s = text.split("]#!]");
Session ses = connections.get(s[0]);
try {
ses.getBasicRemote().sendText(s[1]);
} catch (IOException e) {
MythException.recode("websocket服务器异常:"+e.getMessage(), e, WebsocketServer.class);
}
}
@OnError
public void onError(Throwable throwable) {
throwable.printStackTrace();
log.error(throwable.getMessage());
}
@OnClose
public void onClosing() throws IOException {
connections.remove(session);
session.close();
}
}
WebsocketClient.java
@Component
@Log4j
@ClientEndpoint
public class WebSocketClient {
private Session session;
@OnOpen
public void onOpen(Session session) {
this.session = session;
}
@OnMessage
public void onMessage(String text) throws IOException {
session.getBasicRemote().sendText(text);
}
@OnError
public void onError(Throwable throwable) {
log.error(throwable.getMessage());
}
@OnClose
public void onClosing() throws IOException {
// log.info("连接关闭");
session.close();
}
public void sendMessage(String toId, String text) throws IOException {
text = toId + "]#!]" + text;
// log.info(text);
onMessage(text);
}
public static WebSocketClient connect(String url) throws Exception {
WebSocketContainer wsc = ContainerProvider.getWebSocketContainer();
WebSocketClient client = new WebSocketClient();
wsc.connectToServer(client, new URI(url));
return client;
}
}
Use.java
WebSocketClient client;
try {
client = WebSocketClient.connect("ws://wx.jjyouhuigo.com/websocket/system");
// 发送消息, id 为接受者id, text为发送的信息
client.sendMessage(id, System.currentTimeMillis()+" 文件导入有错误,请重新配置后导入");
// 关闭连接
client.onClosing();
} catch (Exception e) {
e.printStackTrace();
}
View.js
var ws = new WebSocket("ws://127.0.0.1/websocket/" + id);
ws.onopen = function () {
console.log("open");
};
ws.onmessage = function (evt) {
console.log(evt.data)
};
ws.onclose = function (evt) {
console.log("close");
};
ws.onerror = function (evt) {
console.log("error");
};
SpringBoot中使用Websocket进行消息推送的更多相关文章
- 在Spring Boot框架下使用WebSocket实现消息推送
Spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目(使用Spring Boot开发Web项目)以及怎样为我们的Project添加HTTPS的 ...
- WinForm中 Asp.Net Signalr消息推送测试实例
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- Worktile中百万级实时消息推送服务的实现
Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/
- WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...
- HTML5 学习总结(五)——WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...
- HTML5 学习笔记(五)——WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...
- 实现websocket 主动消息推送,用laravel+Swoole
近来有个需求:想实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑. ...
- IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送
摘要 在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置a ...
- 使用websocket进行消息推送服务
Websocket主要做消息推送,简单,轻巧,比comet好用 入门了解:https://www.cnblogs.com/xdp-gacl/p/5193279.html /** * A Web Soc ...
随机推荐
- SQL语句中 NOT IN 子句的“正确打开方式”
在写SQL语句的时候,若where条件是判断用户不在某个集合当中,我们习惯使用 where 列名 not in (集合) 子句,这种写法本身没有问题,但实践过程中却发现很多人在写类似的SQL语句时,写 ...
- Linux网络编程二、tcp连接API
一.服务端 1.创建套接字: int socket(int domain, int type, int protocol); domain:指定协议族,通常选用AF_INET. type:指定sock ...
- LeetCode---Sort && Segment Tree && Greedy
307. Range Sum Query - Mutable 思路:利用线段树,注意数据结构的设计以及建树过程利用线段树,注意数据结构的设计以及建树过程 public class NumArray { ...
- Java-JVM 自定义类加载器
一.sun.misc.Launcher (ExtClassLoader 与 AppClassLoader 的创建) public Launcher() { Launcher.ExtClassLoade ...
- ccf 201512-3 画图(90)
ccf 201512-3 画图(90) #include<iostream> #include<cstring> #include<algorithm> using ...
- ThinkPhp中验证码不显示和配置项的问题解决方法
1.验证码不显示在调用验证码之前加上 ob_clean();像这样: public function verify(){ ob_clean(); $verify = new \Think\Verify ...
- linux添加用户所在群组
etc目录下面有两个文件一个passwd一个grouppasswd里gid是主组,其他组是扩展组,扩展组在/etc/group里描述.useradd username如果不指定,默认创建一个与uid相 ...
- 内存数据库:Redis与Memcached的区别
Redis与Memcached的区别 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都 ...
- 五十一:数据库之Flask-Migrate详解
在实际开发中,经常会发生数据库修改行为,一般数据库修改不是直接手动修改,而是去修改ORM模型,然后再把模型映射到数据库中,这些操作可以通过flask-migrate实现,flask-migrate是基 ...
- SPSS学习笔记之——Kaplan-Meier生存分析
SPSS学习笔记之--Kaplan-Meier生存分析 一.概述 关于生存分析的相关概念,Kaplan-Meier用于估计生存函数,允许有一个分组变量进行生存率的组间比较,还容许一个分层变量.若不考虑 ...