简单搭建webSocket

websocket深入浅出 websocket简介 websocket是什么 答: 它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 为什么需要websocket? 疑问? 我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答: 因为 HTTP 协议有一个缺陷:通信只能由客户端发起 我们都知道轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP... 阅读详情

其他博主连接:http://www.cnblogs.com/xdp-gacl/p/5193279.html

websocket  顾名思义 就是 web + socket 进行通信

《网上摘抄》

一.WebSocket简单介绍

  随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。

  我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。在WebSocket规范提出之前,开发人员若要实现这些实时性较强的功能,经常会使用折衷的解决方法:轮询(polling)和Comet技术。其实后者本质上也是一种轮询,只不过有所改进。

  轮询是最原始的实现实时Web应用的解决方案。轮询技术要求客户端以设定的时间间隔周期性地向服务端发送请求,频繁地查询是否有新的数据改动。明显地,这种方法会导致过多不必要的请求,浪费流量和服务器资源。

  Comet技术又可以分为长轮询和流技术。长轮询改进了上述的轮询技术,减小了无用的请求。它会为某些数据设定过期时间,当数据过期后才会向服务端发送请求;这种机制适合数据的改动不是特别频繁的情况。流技术通常是指客户端使用一个隐藏的窗口与服务端建立一个HTTP长连接,服务端会不断更新连接状态以保持HTTP长连接存活;这样的话,服务端就可以通过这条长连接主动将数据发送给客户端;流技术在大并发环境下,可能会考验到服务端的性能。

  这两种技术都是基于请求-应答模式,都不算是真正意义上的实时技术;它们的每一次请求、应答,都浪费了一定流量在相同的头部信息上,并且开发复杂度也较大。

  伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,使B/S模式具备了C/S模式的实时通信能力。WebSocket的工作流程是这 样的:浏览器通过JavaScript向服务端发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过 TCP连接传输数据。因为WebSocket连接本质上是TCP连接,不需要每次传输都带上重复的头部数据,所以它的数据传输量比轮询和Comet技术小 了很多。本文不详细地介绍WebSocket规范,主要介绍下WebSocket在Java Web中的实现。

  JavaEE 7中出了JSR-356:Java API for WebSocket规范。不少Web容器,如Tomcat,Nginx,Jetty等都支持WebSocket。Tomcat从7.0.27开始支持 WebSocket,从7.0.47开始支持JSR-356,下面的Demo代码也是需要部署在Tomcat7.0.47以上的版本才能运行。

本人示例:

1.  创建maven项目 (web 项目)

            加入pom依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/javax/javaee-api -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

                

2. 创建html   前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title  Java后端WebSocket的Tomcat实现</title>
</head>
<body>
Welcome<br/><input id="text" type="text"/>
     <button οnclick="send()">发送消息</button>
     <hr/>
     <button οnclick="closeWebSocket()">关闭WebSocket连接</button>
     <hr/>
     <div id="message"></div>

</body>

<script type="text/javascript">
    var websocket = null;
    // 判断当前浏览器是否支持websocket
    if('WebSocket' in window) {
        websocket = new WebSocket("ws://localhost:8089/myWebSocket/websocket");
    }else {
        alert("not error  不支持websocket")
    }
    // 连接错误是发生的回调方法
    websocket.onerror = function () {
        alert("websocket.onerror")
    }
    // 连接成功时的回调方法
    websocket.onopen = function () {
        alert("websocket.onopen ")
    }
    //接收到消息的回调函数
    websocket.onmessage = function () {
        alert("websocket.onmessage")
    }
    // 连接关闭时的回调函数
    websocket.onclose = function () {
        alert("websocket.onclose")
    }
    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
    window.onbeforeunload = function () {
        closeWebSocket();
            }
            function closeWebSocket() {
                websocket.close();
            }
            function send() {
                var message = document.getElementById('text').value;
                        websocket.send(message);
                     }
</script>
</html>

3.更改web.xml  添加 welcome页面  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

4. 编写java代码

package com.xiaodu.websocket;

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

 */
    /**
   * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
   * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
   */
@ServerEndpoint("/websocket")
public class MywebSocket {

        /**
         * 连接成功后调用方法
         */
        @OnOpen
        public void  onOpen() {
            System.out.println("连接成功   --- onopen");
        }

        /**
         * 连接关闭调用方法
         */

        @OnClose
        public void onClose() {
            System.out.println("连接关闭   --- onclose");
        }

        /**
         * 连接异常
         */
        @OnError
        public void onError(Throwable error) {
            System.out.println("连接异常  ---onError");
            error.printStackTrace();
        }

        /**
         * 接收到客户短消息
         */
        @OnMessage
        public void onMessage(String mess) {
            System.out.println("接收到客户端消息  --onMessage  =" + mess);
        }


    }

5.基本完成,可以测试  如果遇到问题了可以试试 在web.xml中把你写的类配置到《sevlet》中 或者你使用的是eclipse的时候, 本人使用的是IDEA;

 

 

 

 

WebSocketTool WebSocket调试工具使用说明 WebSocketTool是一款通用的WebSocket调试工具,基于QT框架开发,可以运行在Windows、Linux和MacOS平台下,具备良好的跨平台能力。WebSocketTool调试工具无需安装,下载后解压就可以使用,是一款绿色的软件,易于部署和使用。可以广泛应用于调试设备、调试后台和调试协议等工作,也可用于学习WebSocket编程的用途。 阅读详情

相关推荐

WebSocket---搭建与使用(手把手)

WebSocket是一种在客户端和服务器之间进行实时双向通信的协议。与传统的HTTP请求-响应模式不同,WebSocket允许服务器主动向客户端发送消息,而不需要客户端发起请求。这种实时通信的特性使得WebSocket非常适合于需要实时更新数据的应用,如聊天室、实时游戏、股票市场等。WebSocket协议基于TCP协议,使用了类似HTTP的握手过程进行连接建立,并定义了一种简单的消息格式进行数据传输。同时,WebSocket也提供了一些高级特性,如心跳机制、消息压缩等,来增强通信的可靠性和效率。

爱吃编程的苦 1万+

SpringMvc+Mybatis企业级集成Websocket在线聊天

伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,使B/S模式具备了C/S模式的实时通信能力。WebSocket的工作流程是这 样的:浏览器通过JavaScript向服务端发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过 TCP连接传输数据。因为WebSocket连接本质上是TCP连接,不需要每次传输都带上重复的头部数据,所以它的数据传输量比轮询和Comet技术小 了很多。本文不详细地介绍WebSocket规范,主要介绍下WebSocke

平凡的世界 996

Springboot+Netty+WebSocket搭建简单的消息通知

启动Spring Boot应用程序,访问前端页面,然后通过HTTP请求或前端页面与WebSocket建立连接,并发送消息。消息将通过WebSocket传递到WebSocket处理程序,然后可以根据业务逻辑进行处理和广播。这样,你就建立了一个简单的消息通知系统,使用Spring Boot、Netty和WebSocket实现实时消息传递。创建一个前端页面,使用JavaScript或其他前端技术与WebSocket建立连接并处理消息。创建一个WebSocket处理程序,处理WebSocket连接和消息。

lvobooen的博客 887

一篇文章理解WebSocket原理

websocket协议本质上是一个基于tcp的协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,属于应用层,基于TCP协议,并且复用HTTP握手通道,是一个。WebSocket在建立握手是,数据是通过HTTP传输的,但是建立了连接后,传输则不需要HTTP协议。

superherooooss的博客 2673

在VS2015下配置websocket++,并用C++搭建一个简单的客户端

简介 最近在做一个项目,需要在C++中通过WebSocket和服务器进行通信,但我们在C++中并不能直接使用WebSocket,于是上网搜索后发现websocket++这个库很合适。 Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手,并且它很好的支持了长连接,相较于ajax轮询和long poll更加节省资源。 具体关于WebSocket的相关知识,可以参考知乎上这

qq_32925781的博客 1万+

【WebSocket】java使用WebSocket搭建简单聊天室

本次使用的WebSocket 来搭建简单的聊天室,主要就是熟悉WebSocket是什么,能做什么的简单入门介绍 网络摘抄 websocket是什么? 答: 它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 为什么需要websocket? 疑问? 我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答: 因为 HTTP 协议有一个缺陷:通信只能由客户端发起 我们都知道轮询的效率低,非常浪费资源(因为必须不停连接...

嗟鸠食桑 2160

WebSocket搭建简单的聊天室

WebSocket搭建简单的聊天室 从Servlet3.1开始,Tomcat中就增加了一个websocket-api.jar开发包,这个包可以进行WebSocket程序开发,并且是基于Annotation注解的形式配置的。 在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。 搭建简单

Nicholas_GUB的博客 500

全面分析总结解决Could not transfer artifact org.apache.maven.plugins等此类问题的方法

全面分析总结解决Could not transfer artifact org.apache.maven.plugins,Could not transfer artifact xxx from/to xxx等此类问题的方法

ccjjjjdff的博客 1万+

简单搭建WebSocket服务器

下载nodejs-websocket依赖包 npm install nodejs-websocket 点击回车下载完成之后发现项目中并没有nodejs-websocket相关的文件夹 检查终端有没有报错,确保依赖包名称输入正确 检查是否存在package.json文件,如果没有该文件,手动创建或在终端使用: npm init 手动创建json文件里面的内容: 下载后有个node_modul...

weixin_43405525的博客 1万+

AUTOSAR实战:手把手教你配置EthTsync模块,搞定车载以太网时间同步

本文详细解析AUTOSAR架构中EthTsync模块的配置方法,实现车载以太网时间同步。通过对比gPTP与PTP协议差异,提供从开发环境准备到参数配置、模块集成的全流程指南,并分享性能优化与调试技巧,帮助开发者实现微秒级同步精度,满足自动驾驶等高精度时间同步需求。

weixin_28736335的博客 372

IDEA集成selenium自动化测试(Java+Selenuim+testNG+Maven)

文章目录写在前面01 | 新建Maven项目02 | idea集成Selenium03 | 写在前面 因为软件测试的需求和博主比较经常使用Java,于是,想在Idea中集成selenuim,用Java编写测试代码,因此有了这篇文章来记录一下过程。 资源指路: java使用selenium实现模拟浏览器操作API大全 模拟登录 TestNG入门教程 感谢上面博客的大佬。 01 | 新建Maven项目 不使用骨架创建,直接点击左侧Maven,然后一路next即可。 02 | idea集成Sele

aLinxi的博客 8279

Jetty9 搭建WebSocket简单例子

下载 最新的下载的地址已经移动到eclipse上:http://www.eclipse.org/jetty/downloads.php 目前的版本为9.0.0.M3 JDK版本要求7 所需要的类库 下载下来后,JETTY带了非常多的类库,经过测试发现,最简答的例子仅仅需要 javax.websocket-api-0.0.006.draft.jar jetty-ht

4554

12V转5V稳压电路详细分析(7805三端稳压,LM2596稳压)

7805线性三端稳压 DCDC的意思是直流变到直流(不同直流电源值的转换),只要符合这个定义都可以叫DCDC转换器,或称之为开关电源或开关调整器。 7805属于常用的线性三端稳压器,输入电压范围不大于35V,输入输出压差2V,最大输出电流1.5A,下图为原理图,其原理简单,使 用方便,深受很多用户的喜爱。但是其不足之处就是效率低,特别是压差越大时其效率越低。比如这里12V转5V的效率为 5V/12V≈41.7%。 如上电路是最经典的7805稳压5V电路,电路中有两个电容,电容的作用如下: ...

a2001444的博客 9万+

WebSocket 简单搭建

WebSocket 是在 HTTP 更上一层的通信协议,适合对于实时通信要求比较高的场景。比如微信聊天,当用户还在 APP 停留的时候,有消息就要能够接受到。服务器是一个被动接收请求再回复的技术,如果要让客户端在信息刚产生的时候就收到的话,就需要客户端不断地请求。这种 polling 的方法比较消耗资源。 WebSocket 通过订阅和分发的模式实现了实时通信,下面我们提供一个代码库来搭建一个简单...

Clifnich 569

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2166

RK3568驱动XS9922B:AHD/CVBS双模摄像头兼容性实战

在嵌入式视频开发中,摄像头驱动的稳定性与兼容性往往决定项目交付质量。Linux内核的V4L2框架提供了统一的视频采集抽象,从v4l2_subdev子设备到media controller链路,再到用户态视频节点,每一层都需要精确配置。对于RK3568这类边缘计算平台,其MIPI CSI接口和自研ISP配合RKCIF,构成了完整的多路视频接入通路。当需要接入模拟视频解码芯片时,驱动设计就需同时考虑AHD高清协议与CVBS标清信号的模式切换、格式协商以及寄存器配置。XS9922B作为支持双模输入的解码芯片,可与

weixin_34216614的博客 346

node搭建简单的websocket服务

Web框架 第一个目标是设置一个简单的HTML网页,用于提供表单和消息列表。我们将为此目的使用Node.JS Web框架express。确保已安装Node.JS。 首先,让我们创建一个package.json描述我们项目的清单文件。我建议你把它放在一个专门的空目录中(我会打电话给我chat-example)。 { "name": "socket-chat-example", "versio...

曾经也是个少年 373

8、内存交织技术详解

本文详细解析了内存交织技术的基本原理、工作机制及实现方式,探讨了其在提升内存访问速度和系统性能中的关键作用。文章还分析了内存交织的优缺点、实际应用场景以及与其他优化技术的结合应用,并提出了未来发展的可能方向,为理解与运用该技术提供了全面参考。

g9h0i1的博客 549

用Netty搭建一个简单的WebSocket

Handler: package com.jay.websocket; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; import io....

SCUTJAY的博客 363

华为OD机试新系统真题-谁没交卷(Java /Py/C++/Go/C/Js)

华为OD机试 新系统真题【谁没交卷】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【谁没交卷】多语言题解。

qq_45776114的博客 417

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java搭建websocket_用Java构建一个简单的WebSocket聊天室

前言首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话、好友交流、群聊、离线消息等。今天我们要做的demo就能帮我们做到这一点啦!!!采用框架我们整个Demo基本不需要大家花费太多时间,就可以实现以上的几个功能。首先,我们需要介绍一下我们今天打算采用的框架,InChat : 一个轻量级、高效率的支持多端(应用与硬件Iot)的异...

weixin_30430677的博客 544

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Springboot项目搭建简单的websocket

websocket初步搭建

qq_42537736的博客 3475

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

搭建一个简单的websocket的demo

首先,用idea搭建一个springboot项目 如此如此就不需要演示了把 接下来pom文件引入websocket依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websock...

qq_42240485的博客 1441

WebSocket简单通信搭建

导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.sp

leiPlus的博客 342
上一篇: etc/profile配置的环境变量,关闭终端后失效解决方法
下一篇: 使用socket 获取流读取 时报错java.net.SocketException: Software caused connection abort: recv failed
xiaoduup
博客等级 码龄9年 23粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值