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 {@OnMessagepublic void onMessage(String message, Session session)throws IOException, InterruptedException {// Print the client message for testing purposesSystem.out.println("Received: " + message);// Send the first message to the clientsession.getBasicRemote().sendText("This is the first server message");// Send 3 messages to the client every 5 secondsint 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 clientsession.getBasicRemote().sendText("This is the last server message");}@OnOpenpublic void onOpen () {System.out.println("Client connected");}@OnClosepublic 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>
WebSocket实践的更多相关文章
- 实时Web与WebSocket实践
引言:实时Web越来越被重视,Google.Facebook等大公司也逐渐开始提供实时性服务.实时Web将是未来最热门的话题之一. 本文选自<基于MVC的JavaScript Web富应用开发 ...
- WebSocket实践——Java实现WebSocket的两种方式
什么是 WebSocket? 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...
- WebSocket学习与使用
1.WebSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议,其目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,使得服务器可以主动发送消息给浏览器.在HTML ...
- SpringBoot | 第十九章:web应用开发之WebSocket
前言 web开发也讲解了三章了,这章节开始讲解关于与前端通信相关知识.实现一个在线聊天室类似的功能或者后端推送消息到前端,在没有WebSocket时,读大学那伙还有接触过DWR(Direct Web ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- WebSocket原理与实践(四)--生成数据帧
WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...
- WebSocket原理与实践(三)--解析数据帧
WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义: 在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有 ...
- WebSocket原理与实践(二)---WebSocket协议
WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...
- WebSocket原理与实践(一)---基本原理
WebSocket原理与实践(一)---基本原理 一:为什么要使用WebSocket?1. 了解现有的HTTP的架构模式:Http是客户端/服务器模式中请求-响应所用的协议,在这种模式中,客户端(一般 ...
随机推荐
- Neo4j使用简单例子
Neo4j Versions Most of the examples on this page are written with Neo4j 2.0 in mind, so they skip th ...
- HTML5的特殊标签与IE浏览器的兼容
注释标签 ruby: 行级元素 横排显示 试图写多个汉字和注释,需要多个ruby. 直接上代码: - css样式: 页面效果: 重点标记 mark: 以灰常黄的黄色来重点标记 页面代码: 类似于进度条 ...
- TCP/IP协议,,OSI的七层参考模型,HTTP请求响应机制
一.TCP/IP协议 TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是In ...
- PHP算法之回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, ...
- Windows ipconfig
用法: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | / ...
- Makefile 从入门到放弃
//如有侵权 请联系我进行删除 email:YZFHKM@163.com { 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作, ...
- CSS3——动画
动画是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果. 语法格式: animation:动画名称 动画时间 运动曲线 何时开始 播放次数 是否反 ...
- thinkphp switch标签
用法: <switch name="变量" > <case value="值1" break="0或1">输出内容1 ...
- web移动端rem的适配
** 需求: 随着移动端设备的变化,内容也跟着变化.**先来说说rem单位,以rem为单位,其大小是根据根元素(html标签)的字体大小来判断的, 如 html的font-size:100p ...
- 框架:Flutter(移动应用程序开发框架)
ylbtech-框架:Flutter(移动应用程序开发框架) Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作. ...