WebSocket实践
基本弄清楚了WebSocket的来龙去脉后,开始了实现WebSocket技术的探索。
看过一篇文章,测试了八种WebSocket框架性能,得以了解到实现WebSocket技术的框架有:
Netty、Undertow、Jetty、Vert.x、Grizzly、spray-websocket、node.js-websocket/Node.js、Golang
补充下:
作为老牌的servle容器,tomcat实际也可以实现WebSocket技术。
下面说一下我遇到的一个标准:JSR356标准:
JSR 356,对于WebSocket的的Java API
这标志着所有兼容JAVA EE 7的应用程序都必须实现这个API。
java开发人员不需要关注websocket具体的实现,而只要关注逻辑就可以了。
具体带来的好处是,比如java EE容器,必须实现这个标准,使我们的编码可以统一规范(之前是如果你使用jetty,那么使用jetty的jar包实现websocket是一套API,如果你使用tomcat,那么使用tomcatjar包实现websocket是一套API,而现在统一的使用一套就可以了)。
但是jetty是在9.1版本之后才实现的(起初我的demo项目怎么也访问不到服务端的websocket,是jetty版本过低。),tomcat是在7之后实现的。
下面是具体实现的代码
1.首先需要引用jar包
scope为provided,为了防止容器本身的websocket音响。
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
2.服务端的代码:
package com.lanyoung.im.back.ly.websocket;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
@ServerEndpoint("/websocket")
public class WebSocketTest {
@OnMessage
public void onMessage(String message, Session session)
throws IOException, InterruptedException {
// Print the client message for testing purposes
System.out.println("Received: " + message);
// Send the first message to the client
session.getBasicRemote().sendText("This is the first server message");
// Send 3 messages to the client every 5 seconds
int sentMessages = 0;
while(sentMessages < 3){
Thread.sleep(5000);
session.getBasicRemote().
sendText("This is an intermediate server message. Count: "
+ sentMessages);
sentMessages++;
}
// Send a final message to the client
session.getBasicRemote().sendText("This is the last server message");
}
@OnOpen
public void onOpen () {
System.out.println("Client connected");
}
@OnClose
public void onClose () {
System.out.println("Connection closed");
}
}
3.客户端代码
<!DOCTYPE html>
<html>
<head>
<title>Testing websockets</title>
</head>
<body>
<div>
<input type="submit" value="Start" onclick="start()" />
</div>
<div id="messages"></div>
<script type="text/javascript">
var webSocket =
new WebSocket('ws://localhost:8080/websocket');
webSocket.onerror = function(event) {
onError(event)
};
webSocket.onopen = function(event) {
onOpen(event)
};
webSocket.onmessage = function(event) {
onMessage(event)
};
function onMessage(event) {
document.getElementById('messages').innerHTML
+= '<br />' + event.data;
}
function onOpen(event) {
document.getElementById('messages').innerHTML
= 'Connection established';
}
function onError(event) {
alert(event.data);
}
function start() {
webSocket.send('hello');
return false;
}
</script>
</body>
</html>
转载于:https://www.cnblogs.com/invlong/p/5983340.html
WebSocket实践相关推荐
- websocket实践与浅入浅出
websocket实践与浅入浅出 websocket与http的区别? websocket的应用场景? websocket通信方式 websocket协议结构 nginx配置 分布式下IM多端同步的实 ...
- WebSocket学习与使用
1.WebSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议,其目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,使得服务器可以主动发送消息给浏览器.在HTML ...
- SCUT01在线协作白板技术解决方案
在七牛云校园黑客马拉松中,来自华南理工大学的SCUT01团队,为我们带来了UI精美.体验优秀的白板作品,在大赛中获得二等奖的好成绩.以下是这款在线协作白板的技术解决方案. 背景 疫情背景下,线上课堂. ...
- ASR项目实战-决策点
ASR项目实战-决策点 针对语音识别的产品,分别记录设计.开发过程中的决策点. 实时语音识别 对于实时语音识别来说,客户端和服务端之间实时交换语音数据和识别的结果. 客户端在启动识别时,即开始发送语音 ...
- 石墨文档Websocket百万长连接技术实践
内容简介:Web 服务端推送技术经过了长轮询.短轮询的发展,最终到 HTML5 标准带来的 WebSocket 规范逐步成为了目前业内主流技术方案.它使得消息推送.消息通知等功能的实现变得异常简单,那 ...
- websocket创建失败_SpringBoot2.2 实践WebSocket被不靠谱的百度搜索结果坑了多少人
日常普通项目开发过程中,我们几乎很少用到WebSocket开发.但最近的项目有个功能需要服务器端实时的推送最新的信息同步到前端页面展示.所以思前想后,决定采用WebSocket再适合不过了.于是在实现 ...
- 京东到家基于netty与websocket的实践
作者:李天翼,软件开发工程师,任职于达达京东到家后台研发团队,负责订单流程的开发工作. 背景 在京东到家商家中心系统中,商家提出在 Web 端实现自动打印的需求,不需要人工盯守点击打印,直接打印小票, ...
- Websocket 百万长连接技术,在石墨文档中的实践
今日推荐 推荐一个 Java 接口快速开发框架干掉Random:这个类已经成为获取随机数的王者Docker + Intellij IDEA,提升 10 倍生产力!笑出腹肌的注释,都是被代码耽误的诗人! ...
- 石墨文档 Websocket 百万长连接技术实践
引言 在石墨文档的部分业务中,例如文档分享.评论.幻灯片演示和文档表格跟随等场景,涉及到多客户端数据同步和服务端批量数据推送的需求,一般的 HTTP 协议无法满足服务端主动 Push 数据的场景,因此 ...
最新文章
- 史上最全排序算法总结!建议收藏
- Docker compose多容器管理
- Java删除properties配置文件中指定键值的代码
- oracle启动监听读取哪个文件,监听服务启动及数据文件恢复oracle数据库
- java property类_Java之Property类使用
- ADO.NET 2.0 的并行控制与数据存取冲突侦测
- NHibernate+WCF项目实战(四)使用WAS对Webservices接口进行压力测试
- 【感悟】本书书名无法描述本书内容(二)
- Lync Server 2013 实战系列之五:标准版-定义拓扑生成器
- Windows应用替代方案接龙
- Turbo码,接近完美的编码
- win10 Matlab2017a .m相关文件关联
- CSS布局控制--盒子模型
- 用python画科赫雪花
- ros怎么跑小车_ROS与RACECAR教程-Arduino ROS节点进行小车控制
- 零信任是一次绝地反击
- spring的事务依赖
- 针对谷氨酰胺运输体的小分子抑制剂
- 手机app数据爬取难度等级评估
- ECCV2018 papers
热门文章
- 论文必备神器,1行代码搞定Latex公式编写,这个4.6M的Python小插件
- OCR常见问题(4)
- Active Learning: 一个降低深度学习时间,空间,经济成本的解决方案
- 深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建
- android.net是哪个jar,【Android Clock Synchronization】Android时钟同步:基于NTP协议的第三方库Apache Commons Net......
- idea 编译 maven 项目
- python2.7输出语句_python2.7入门---模块(Module)
- 留学面试 计算机专业话题,英语面试_美国留学计算机专业详解_沪江英语
- 新疆师范大学计算机科学学院,新疆师范大学王炜教授亲临计科学院讲学——记计算机科学学院研究生院...
- excel显著性检验_怎样征服老板?教你用excel找到数据之间隐藏信息