iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >如何使用Java实现WebSocket
  • 648
分享到

如何使用Java实现WebSocket

2023-06-15 00:06:22 648人浏览 八月长安
摘要

这篇文章主要介绍如何使用Java实现websocket,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开

这篇文章主要介绍如何使用Java实现websocket,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

一、WEBSocket简介

WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能。

在WebSocket应用程序中,服务器发布WebSocket端点,客户端使用url连接到服务器。建立连接后,服务器和客户端就可以互相发送消息。客户端通常连接到一台服务器,服务器接受多个客户端的连接。

1.1 WebSocket协议

WebSocket协议有两个部分:握手和传输。客户端通过向服务端URL发送握手请求来建立连接。握手与现有的基于Http的基础结构相兼容。Web服务器将其解释为升级版的HTTP连接请求。
一个客户端建立连接的握手请求:

GET /path/to/websocket/endpoint HTTP/1.1Host: localhostUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==Origin: http://localhostSec-WebSocket-Version: 13

一个服务端响应:

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

从上面的请求和响应中可以看出来,一个WebSocket连接的建立,需要客户端和服务端维护一个Key来作为该连接的连接凭证。
客户端向服务端发送WebSockeTKEy,服务器根据WebSocketKey生成WebSocketAccept返回给客户端,客户端对WebSocketKey的值再进行相同的操作,如果与服务器返回的Accept的值相匹配,就表示握手成功。握手之后客户端与服务端就互相发送消息。

如何使用Java实现WebSocket

1.2 WebSocket支持的消息类型

WebSocket支持文本消息(UTF-8编码)和二进制消息。WebSocket的控制消息由Close、Ping、Pong组成。ping和pong也有可能包含应用程序信息。
webSocket端点具有如下的URI形式表示:

ws://host:port/path?querywss://host:port/path?query

ws代表未加密的连接,默认端口是80
wss代表加密的连接,默认端口是443
path:表示服务器内端点的位置
query:路径参数信息

二、创建一个WebSocket程序

创建和部署WebSocket端点的过程如下:
1、创建一个端点类
2、实现端点的生命周期方法
3、将业务逻辑添加到端点
4、将端点部署到Web应用程序中

注意:与Servlet相反,WebSocket端点类会被实例化多次,容器针对与其部署的URI的每个连接都创建一个实例。每个实例都与一个连接相关联。因为在任何时间都只有一个线程执行端点实例的代码,所以有助于保持每个连接的用户状态简化开发。

2.1 生命周期方法

EndPoint类中定义了三个生命周期方法:onOpen、onClose、onError
使用注解方式创建服务类

@ServerEndpoint("/echo")public class EchoEndpoint {   @OnMessage   public void onMessage(Session session, String msg) {      try {         session.getBasicRemote().sendText(msg);      } catch (IOException e) { ... }   }}

2.2 业务逻辑方法

@ServerEndpoint("/receive")public class ReceiveEndpoint {   @OnMessage   public void textMessage(Session session, String msg) {      System.out.println("Text message: " + msg);   }   @OnMessage   public void binaryMessage(Session session, ByteBuffer msg) {      System.out.println("Binary message: " + msg.toString());   }   @OnMessage   public void pongMessage(Session session, PongMessage msg) {      System.out.println("Pong message: " +                           msg.getApplicationData().toString());   }}

注意:一个服务类最多可以有三个OnMessage注解,每个消息类型分别使用一种方法:Text、Binary、Pong

2.3 维护客户状态

有时在程序中我们可能需要在连接中维护一些用户参数,WebSocket也提供了这样的服务
Session.getUserProperties获取用户参数信息
如果要存储所有连接的客户端共有的信息,可以使用静态变量,但是需要用户保证对数据的线程安全访问。

@ServerEndpoint("/delayedecho")public class DelayedEchoEndpoint {   @OnOpen   public void open(Session session) {      session.getUserProperties().put("previousMsg", " ");   }   @OnMessage   public void message(Session session, String msg) {      String prev = (String) session.getUserProperties()                                    .get("previousMsg");      session.getUserProperties().put("previousMsg", msg);      try {         session.getBasicRemote().sendText(prev);      } catch (IOException e) { ... }   }}

2.4 数据格式的编码与解码

由于客户端和服务端交互可能涉及数据格式的转换,所以提供了Decoder和Encoder的方式解决。
同时由于WebSocket的@Message注解只能有一个用来传输Text信息或Binary信息,所以要进行最常用的JSON->entity转换解析就需要该方法
Encoder

Encoder.Text 用于文本消息Encoder.Binary 用于二进制消息

使用方法:

创建编解码类

public class MessageATextEncoder implements Encoder.Text<MessageA> {   @Override   public void init(EndpointConfig ec) { }   @Override   public void destroy() { }   @Override   public String encode(MessageA msgA) throws EncodeException {      // Access msgA's properties and convert to jsON text...      return msgAJsonString;   }}

在端点类注解中添加该Encoder

@ServerEndpoint(   value = "/myendpoint",   encoders = { MessageATextEncoder.class, MessageBTextEncoder.class })public class EncEndpoint { ... }

这时候就可以发送MessageA和MessageB两种类型的Text数据

MessageA msgA = new MessageA(...);MessageB msgB = new MessageB(...);session.getBasicRemote.sendObject(msgA);session.getBasicRemote.sendObject(msgB);

注意:webSocket会自动寻找使用哪种编码器,所以发送数据统一使用sendObject即可

Decoder

实现Decoder以将WebSocket消息转换为Java对象

  • Decoder.Text 用于文本消息

  • Decoder.Binary 用于二进制消息

使用方法

与Encoder类似

注意:与Encoder不同,Decoder最多可以指定一个Binary和一个Text类型的Decoder,如果有两种以上的Java类型作为文本消息进行发送和接收需要进行定义处理。可以使多个消息继承一个公共的消息父类

编写Decoder类,对收到消息类型的不同进行不同的解码

public class MessageTextDecoder implements Decoder.Text<Message> {   @Override   public void init(EndpointConfig ec) { }   @Override   public void destroy() { }   @Override   public Message decode(String string) throws DecodeException {      // Read message...      if (  )         return new MessageA(...);      else if (  )         return new MessageB(...);   }   @Override   public boolean willDecode(String string) {      // Determine if the message can be converted into either a      // MessageA object or a MessageB object...      return canDecode;   }}

在端点类中添加decoders={MessageDecoder.class}

@ServerEndpoint(   value = "/myendpoint",   encoders = { MessageATextEncoder.class, MessageBTextEncoder.class },   decoders = { MessageTextDecoder.class })public class EncDecEndpoint { ... }

在@OnMessage方法中使用

@OnMessagepublic void message(Session session, Message msg) {   if (msg instanceof MessageA) {      // We received a MessageA object...   } else if (msg instanceof MessageB) {      // We received a MessageB object...   }}

以上是“如何使用Java实现WebSocket”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何使用Java实现WebSocket

本文链接: https://www.lsjlt.com/news/275895.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Java实现WebSocket
    这篇文章主要介绍如何使用Java实现WebSocket,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开...
    99+
    2023-06-15
  • 如何使用C++实现Websocket?
    c++++ 实现 websocket 的步骤如下:创建服务器:使用 boost asio 库创建服务器,并指定端口号。处理客户端连接:使用 websocket++ 库处理客户端连接,并进...
    99+
    2024-05-11
    c++ typedef
  • 教你怎么使用Java实现WebSocket
    目录一、WebSocket简介1.1 WebSocket协议1.2 WebSocket支持的消息类型二、创建一个WebSocket程序2.1 生命周期方法2.2 业务逻辑方法2.3 ...
    99+
    2024-04-02
  • java WebSocket 服务端如何实现
    这篇文章给大家分享的是有关java WebSocket 服务端如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是WebSocket  WebSocket协议是基于TCP的一种新的网络...
    99+
    2023-06-29
  • 如何使用PHP和WebSocket实现实时通信
    随着互联网技术的不断发展,实时通信已经成为了日常生活中不可缺少的一部分。利用WebSockets技术可以实现高效、低延迟的实时通信,而PHP作为互联网领域使用最广泛的开发语言之一,也提供了相应的WebSocket支持。本文将为大家介绍如何使...
    99+
    2023-12-17
    PHP websocket 实时通信
  • 如何利用html5的websocket实现websocket聊天室
    这篇文章主要讲解了“如何利用html5的websocket实现websocket聊天室”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用html5的we...
    99+
    2024-04-02
  • SpringBoot如何使用WebSocket实现点对点消息
    这篇文章主要介绍“SpringBoot如何使用WebSocket实现点对点消息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何使用WebSocket实现点对点消息”文章能帮助大...
    99+
    2023-07-06
  • Node.js websocket如何使用socket.io库实现实时聊天室
    这篇文章主要介绍Node.js websocket如何使用socket.io库实现实时聊天室,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!认识websocketWebSocket p...
    99+
    2024-04-02
  • goland如何实现websocket server
    这篇文章主要介绍了goland如何实现websocket server的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇goland如何实现websocket server文章都会有所收获,下面...
    99+
    2023-07-02
  • Spring Boot如何实现WebSocket
    本篇内容介绍了“Spring Boot如何实现WebSocket”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 WebSoc...
    99+
    2023-06-30
  • Java应用层协议WebSocket如何实现消息推送
    这篇“Java应用层协议WebSocket如何实现消息推送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java应用层协议W...
    99+
    2023-07-05
  • laravel如何使用websocket
    什么是WebSocket? WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得浏览器和服务器之间的实时通信变得更加容易。与HTTP请求不同,WebSocket连接是持久的,这意味着...
    99+
    2023-08-31
    php laravel websocket
  • 如何使用Go语言实现Websocket心跳检测
    如何使用Go语言实现Websocket心跳检测Websocket是一种在Web应用中实现双向通信的协议,它能够允许服务器主动向客户端推送数据。在一些实时性要求高的应用中,我们可能需要实时监测客户端的状态,确保连接的稳定性。为了实现这个目标,...
    99+
    2023-12-14
    Go语言 websocket 心跳检测
  • 如何使用Go语言实现Websocket长连接保持
    如何使用Go语言实现Websocket长连接保持Websocket是HTML5提供的一种协议,可以实现服务器与客户端之间的双向通信。在实际开发中,很多场景需要保持长连接,以便实时推送数据或实现即时通讯功能。本文将介绍如何使用Go语言实现We...
    99+
    2023-12-14
    Go语言 websocket 长连接保持
  • 如何使用C#基于WebSocket实现聊天室功能
    这篇文章将为大家详细讲解有关如何使用C#基于WebSocket实现聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ServerHelper:using System;using ...
    99+
    2023-06-29
  • Java实现websocket客户端
    常规情况下,大多数时候Java后台作为websocket服务端,实现方式也比较简单,网上很多案例代码。但是很多时候项目中服务与服务之间也需要使用websocket通信,此时项目就需要实现客户端功能。 步骤一:导入依赖: org.jav...
    99+
    2023-10-23
    java websocket 开发语言
  • 如何用JS WebSocket实现简单聊天
    目录短轮询(Polling)长轮询(Long-Polling)WebSocket通信原理实现简单单聊心跳保活总结短轮询(Polling) 短轮询的实现思路就是浏览器端每隔几秒钟向服务...
    99+
    2024-04-02
  • 如何在golang中使用WebSocket实现实时数据可视化
    如何在golang中使用WebSocket实现实时数据可视化引言:现如今,实时数据可视化在众多领域都发挥着重要作用,而WebSocket是一种用于在Web浏览器和服务器之间进行实时双向通信的协议。本文将介绍如何使用golang中的WebSo...
    99+
    2023-12-17
    可视化 Golang websocket
  • 如何使用Go语言实现多线程Websocket通信
    在近年来,实时通信已经成为了一种基本的需要。WebSocket则更是实时通信当中的佼佼者,它能够更快速、有效地实现客户端和服务器端之间的实时通信。而Go语言也作为近年来较火热的一种语言,被广泛应用于实时通信中。利用Go语言的优点以及多线程处...
    99+
    2023-12-14
    多线程 Go语言 Websocket通信
  • 在Java中使用WebSocket
    如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持! 一、  简介 1.1 什么是WebSocket WebSocket是一种协议,用于...
    99+
    2023-09-02
    java websocket 网络协议
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作