基本弄清楚了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音响。

  1. <dependency>
  2. <groupId>javax</groupId>
  3. <artifactId>javaee-api</artifactId>
  4. <version>7.0</version>
  5. <scope>provided</scope>
  6. </dependency>

2.服务端的代码:

  1. package com.lanyoung.im.back.ly.websocket;
  2. import javax.websocket.OnClose;
  3. import javax.websocket.OnMessage;
  4. import javax.websocket.OnOpen;
  5. import javax.websocket.Session;
  6. import javax.websocket.server.ServerEndpoint;
  7. import java.io.IOException;
  8. @ServerEndpoint("/websocket")
  9. public class WebSocketTest {
  10. @OnMessage
  11. public void onMessage(String message, Session session)
  12. throws IOException, InterruptedException {
  13. // Print the client message for testing purposes
  14. System.out.println("Received: " + message);
  15. // Send the first message to the client
  16. session.getBasicRemote().sendText("This is the first server message");
  17. // Send 3 messages to the client every 5 seconds
  18. int sentMessages = 0;
  19. while(sentMessages < 3){
  20. Thread.sleep(5000);
  21. session.getBasicRemote().
  22. sendText("This is an intermediate server message. Count: "
  23. + sentMessages);
  24. sentMessages++;
  25. }
  26. // Send a final message to the client
  27. session.getBasicRemote().sendText("This is the last server message");
  28. }
  29. @OnOpen
  30. public void onOpen () {
  31. System.out.println("Client connected");
  32. }
  33. @OnClose
  34. public void onClose () {
  35. System.out.println("Connection closed");
  36. }
  37. }

3.客户端代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Testing websockets</title>
  5. </head>
  6. <body>
  7. <div>
  8. <input type="submit" value="Start" onclick="start()" />
  9. </div>
  10. <div id="messages"></div>
  11. <script type="text/javascript">
  12. var webSocket =
  13. new WebSocket('ws://localhost:8080/websocket');
  14. webSocket.onerror = function(event) {
  15. onError(event)
  16. };
  17. webSocket.onopen = function(event) {
  18. onOpen(event)
  19. };
  20. webSocket.onmessage = function(event) {
  21. onMessage(event)
  22. };
  23. function onMessage(event) {
  24. document.getElementById('messages').innerHTML
  25. += '<br />' + event.data;
  26. }
  27. function onOpen(event) {
  28. document.getElementById('messages').innerHTML
  29. = 'Connection established';
  30. }
  31. function onError(event) {
  32. alert(event.data);
  33. }
  34. function start() {
  35. webSocket.send('hello');
  36. return false;
  37. }
  38. </script>
  39. </body>
  40. </html>

WebSocket实践的更多相关文章

  1. 实时Web与WebSocket实践

    引言:实时Web越来越被重视,Google.Facebook等大公司也逐渐开始提供实时性服务.实时Web将是未来最热门的话题之一.  本文选自<基于MVC的JavaScript Web富应用开发 ...

  2. WebSocket实践——Java实现WebSocket的两种方式

    什么是 WebSocket? 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...

  3. WebSocket学习与使用

    1.WebSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议,其目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,使得服务器可以主动发送消息给浏览器.在HTML ...

  4. SpringBoot | 第十九章:web应用开发之WebSocket

    前言 web开发也讲解了三章了,这章节开始讲解关于与前端通信相关知识.实现一个在线聊天室类似的功能或者后端推送消息到前端,在没有WebSocket时,读大学那伙还有接触过DWR(Direct Web ...

  5. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  6. WebSocket原理与实践(四)--生成数据帧

    WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...

  7. WebSocket原理与实践(三)--解析数据帧

    WebSocket原理与实践(三)--解析数据帧 1-1 理解数据帧的含义:   在WebSocket协议中,数据是通过帧序列来传输的.为了数据安全原因,客户端必须掩码(mask)它发送到服务器的所有 ...

  8. WebSocket原理与实践(二)---WebSocket协议

    WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...

  9. WebSocket原理与实践(一)---基本原理

    WebSocket原理与实践(一)---基本原理 一:为什么要使用WebSocket?1. 了解现有的HTTP的架构模式:Http是客户端/服务器模式中请求-响应所用的协议,在这种模式中,客户端(一般 ...

随机推荐

  1. python下pip使用bug汇总

    PS:以下操作全部基于win10 64位操作系统 pip安装任何包都出现问题: Cannot unpack file /tmp/pip-KzJgHD-unpack/simple 报错: Cannot ...

  2. Unity中DoTween的使用

    在Unity手游开发中,经常用到插值运算,我们可以使用Mathf.Lerp自行去实现效果,但是使用插件提高了我们的开发效率,这里归结一下DoTween的基本使用方式以及效果说明: 直接代码: usin ...

  3. 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]

    作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...

  4. 查看收到的邮件的来源ip以及包信息

    有时我们需要知道收到的邮件是从哪台服务器发送过来的,或者想知道该邮件的报文头是怎样的.以下以网易邮箱为例介绍如果抓取这些信息. 首先我们需要知道网易邮箱的访问服务器(拉协议),由于SMTP是推的协议, ...

  5. 0908CSP-S模拟测试赛后总结

    我早就料到昨天会考两场2333 话说老师终于给模拟赛改名了啊. 距离NOIP祭日还有60天hhh. 以上是废话. %%%DeepinC无敌神 -rank1 zkt神.kx神.动动神 -rank2 有钱 ...

  6. spring Cache + Redis 开发数据字典以及自定义标签

    一.数据库表结构 1.  分类表:dict_type 2.  子项表:dict_entry 二.页面维护功能示意图: 1.  分类管理 点击子项管理进入子项管理页面 2.子项管理 三.数据字典添加到缓 ...

  7. C++——类的多继承

    多继承概念 一个类有多个直接基类的继承关系称为多继承 多继承声明语法 class  派生类名 : 访问控制  基类名1 ,  访问控制  基类名2 ,  … , 访问控制  基类名n { 数据成员和成 ...

  8. hibernate_04_hibernate多对多的关系映射

    1.实体类的多对多的关系映射 一个用户可以有多个角色 User.java public class User { private Long user_id; private String user_c ...

  9. csp-s模拟测试80(b)

    csp-s模拟测试80(b) 水题没什么可写的. $T1SB$规律题正解调了仨小时就过了. $T2SBDp$题颓完题解就秒了. $T3SB$数据结构考场想到正解就弃了,考后太懒一半正解一发随机化就A了 ...

  10. IEnumerable_vs_IEnumerator

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...