websocket(一)--握手

2023-11-03

最近在琢磨怎么实现服务端的消息推送,因为以前都是通过客户端请求来获取信息的,如果需要实时信息就得轮询,比如通过ajax不停的请求。
websocket相当于对HTTP协议进行了升级,客户端和服务端通过websocket协议握手成功后,两者之间建立一个数据通道(长连接,双通道),以此来传输数据,而不必每次都由客户端发起请求。
这篇文章先来通过代码来介绍怎样实现“握手”,消息推送在后边的文章中写。
注意:1.JavaEE版本为7.0  
     2.tomcat版本为8.0
     3.不需要额外导入其他的jar包
  由于websocket不支持低版本的javaEE和tomcat,所以必须符合上述条件,我是在Myeclipse2014 的IDE中进行编码的,该IDE支持javaEE7.0

WebSocketServer .java

package socket;

import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value = "/socket")  
public class WebSocketServer {
    @OnMessage  
    public void onMessage(String message, Session session)   
        throws IOException, InterruptedException {  
        //输出客户端发来的信息
        System.out.println("Received: " + message);  

        // 向客户端发送信息  
        session.getBasicRemote().sendText("This is message from server");  
    }  

    @OnOpen  
    public void onOpen () {  
        System.out.println("Client connected");  
    }  

    @OnClose  
    public void onClose () {  
        System.out.println("Connection closed");  
    }  



}

使用@ServerEndpoint注解后该类就类似一个servlet了。包含的方法如上。这部分代码即服务端代码。

下面的客户端代码:
socketClient.html




Testing websockets

<div id="messages"></div>
<script type="text/javascript">
    /*   申请一个WebSocket对象,参数是需要连接的服务器端的地址 */
    var webSocket =  new WebSocket('ws://localhost:8080/websockettest/socket');

    /* 如果出现连接,处理,接收,发送数据失败的时候就会触发onerror事件 */
    webSocket.onerror = function(event) {
        onError(event)
    };

    /* 当websocket创建成功时,即会触发onopen事件 */
    webSocket.onopen = function(event) {
        onOpen(event)
    };

    /* 当客户端收到服务端发来的消息时,会触发onmessage事件,参数evt.data中包含server传输过来的数据 */
    webSocket.onmessage = function(event) {
        onMessage(event)
    };

    /* 当客户端收到服务端发送的关闭连接的请求时,触发onclose事件 */
    webSocket.onclose = function(event) {
        onMessage(event)
    };

    function onMessage(event) {
        alert("message:"+event.data);
    }

    function onOpen(event) {
        alert("open success");
        webSocket.send('hello');
    }

    function onClose(event) {
        alert("closed");
    }

    function onError(event) {
        alert("error");
    }

</script>



以上就是实现客户端与服务端握手的实例。

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/dingxiaoyue/p/4931742.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

websocket(一)--握手 的相关文章

随机推荐

  • 解决SQL语句警告提示

  • MySQL之mysqldump备份和恢复

    一 备份单个数据库 1 备份命令 mysqldump MySQL数据库自带的一个很好用的备份命令 是逻辑备份 导出 的是SQL语句 也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程 单实例语法 Syntax
  • 【深度学习】如何用PyTorch构建一个ResNet50网络?(附代码)

    ResNet Residual Network 是一种深度卷积神经网络 具有非常深的网络结构 并在ImageNet图像分类比赛中取得了很好的成绩 ResNet的一个关键点是增加了残差块 residual block 使网络更容易训练 Res
  • 用busybox构建最小根文件系统详解

    1 busybox源码获取 1 busybox官网下载地址 https busybox net 2 建议下载busybox的版本 尽量和你使用的编译环境 比如 Ubuntu 的版本相近 版本差太多可能需要解决一些编译时候的兼容问题 2 bu
  • 处理textarea的空格和换行

    刚发了一篇博客 然后发现csdn在发布用户的文章时好像没有处理输入的换行和空格 之前没有很在意 因为这次我辛苦缩进的代码居然显示一团糟 有点接受不了 鉴于最近做的需求遇到了这个问题 所以说一下这个问题 鉴于开发是在windows下的 lin
  • linux总结-vi、vim简介(3)

    什么是vim vim是从 vi 发展出来的一个文本编辑器 代码补完 编译及错误跳转等方便编程的功能特别丰富 在程序员中被广泛使用 vim键盘图 初次见面 看不懂上图没关系 不妨先继续学习vim 大致了解vim后再来细细品味它 vi vim
  • c语言字符串做为函数参数传递,c语言:字符串做为函数参数传递

    1 值传递 void swap int x int y int temp x x y y temp void main int a 10 b 20 swap a b 执行后 并不会交换 2 引用传递 void swap int x int
  • C# 连接mySQL数据库访问异常:“给定关键字不在字典中”解决方案

    在自己电脑上开发的软件连接本机mysql数据库一切正常 部署到客户那边 运行时报异常 给定关键字不在字典中 原因 本机MySql数据库和客户那边的数据库版本不一致 使用的mysql data dll版本太低导致的 解决 更换mysql da
  • 深入理解Java内存模型

    作者 谢照东 链接 https www zhihu com question 29037280 answer 43136323 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 我只是编码界的搬运工 深入理解J
  • 淘宝APP用户行为数据分析案例(附python代码及注释)

    淘宝APP用户行为数据分析案例 一 分析背景与目的 1 1背景与数据限制 电商平台的最核心的功能就是为买卖双方提供高效和体验良好的交易服务 得益于算法技术的发展 淘宝APP给买方提供了搜索 推荐及广告等系统和功能 使用户能高效地触达感兴趣或
  • 电力电子技术笔记-整流电路5

    电容滤波的不可控整流电路 在交 直 交变频器 不间断电源 开关电源等应用场合中 大量应用 最常用的是单相桥和三相桥两种接法 由于电路中的电力电子器件采用整流二极管 故也称这类电路为二极管整流电路 1 电容滤波的单相不可控整流电路 常用于小功
  • hugging face 官方文档——datasets、optimizer

    文章目录 一 Load dataset 1 1 Hugging Face Hub 1 2 本地和远程文件 1 2 1 CSV 1 2 2 JSON 1 2 3 text 1 2 4 Parquet 1 2 5 内存数据 python字典和D
  • 关于操作系统学习路线分析

    自己学习操作系统的时间也挺长了 虽然目前的成果还不是特别明显 但是在这段时间中还是学习了很多 今天想在这里和大家分享一下如何学习操作系统 以及如何制定学习操作系统的路线 以下是针对有过编程经历的 1 首先操作系统是人机交互的代理 那么作为操
  • 记录错误:cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\m

    使用Opencv时出现错误 cv2 error OpenCV 4 4 0 C Users appveyor AppData Local Temp 1 pip req build h4wtvo23 opencv modules imgproc
  • LTE学习笔记2:DMA多分址,制式,速率,性能指标

    1 DMA division multiple access 分多址 多址方式 TDMA 时分多址 FDMA 频分多址 CDMA 码分多址 SDMA 空分多址 PDMA 包分多址 3G技术 TD SCDMA TDD WCDMA FDD CD
  • windows通过wsl2安装ubuntu系统

    wsl Windows Subsystem for Linux 即用于Windows的安装Linux子系统 实现了在windows 10 或 windows 11上运行原生Linux系统的功能 wsl2 为其最新版本 可以更好的在Windo
  • 华为OD机试 - 消消乐游戏(Java)

    题目描述 游戏规则 输入一个只包含英文字母的字符串 字符串中的两个字母如果相邻且相同 就可以消除 在字符串上反复执行消除的动作 直到无法继续消除为止 此时游戏结束 输出最终得到的字符串长度 输入描述 输入原始字符串 str 只能包含大小写英
  • python音频分析工具_python – 鸟鸣音频分析 – 查找两个剪辑的匹配程度

    要做出这个答案 因为评论太久了 我基本上在这个领域工作 所以我觉得我有一些知识 显然 从我的立场来看 我建议使用音频而不是图像 我还建议使用MFCC作为特征提取 您可以将其视为总结 表征音频特定子带的系数 因为它们 GMM是去的 要执行此任
  • SSM入门—SpringMVC框架

    1 SpringMVC概述 Spring Web MVC 是一种基于Java的实现Web MVC设计模式的请求驱动类型的轻量级Web框架 2 MVC的设计模式 M model 模型 业务模型 数据模型 实体 业务代码 数据代码 V View
  • websocket(一)--握手

    最近在琢磨怎么实现服务端的消息推送 因为以前都是通过客户端请求来获取信息的 如果需要实时信息就得轮询 比如通过ajax不停的请求 websocket相当于对HTTP协议进行了升级 客户端和服务端通过websocket协议握手成功后 两者之间