• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:IDEA-Spring-Boot-Gradle-websocket-入门笔记

java 搞代码 4年前 (2022-02-14) 32次浏览 已收录 0个评论
文章目录[隐藏]

WebSocket是一种网络通讯协定,一个TCP连贯的两端,能够同时给对方发送音讯,即反对全双工通信。比拟常见的利用场景就是服务端给客户端推送信息,绝对于轮询,WebSocket缩小了宽带资源节约,实时性更强。

WebSocket利用了HTTP协定,建设连贯之后,会先发一个非凡的HTTP申请过来,服务器发现这是个WebSocket的申请之后,就依照协定要求返回一个非凡的HTTP响应,通知客户端“我晓得你想用WebSocket了,咱们依照它的协定来工作吧”。而后TCP链接就不会断开了,留着发消息。所以说WebSocket只利用你原来的80端口(ws://)和443端口(wss://)就能够工作,不须要再开个端口。

咱们将应用以下框架 or 工具
IDEA 2021.1
Gradle 6.8.3
Spring Boot 2.3.10

1. 新建springboot我的项目

能够在 https://start.spring 生成springboot我的项目

2. build.gradle 增加 spring-boot-starter-websocket

plugins {
    id 'org.springframework.boot' version '2.3.10.RELEASE'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'idea'
}

group = 'com.ben'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    maven{ url 'https://maven.aliyun.com/repository/public'}
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.projectlombok:lombok:1.18.18'

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

WebSocket HelloWorld版构建

1. configuration 配置

在src/main目录下创立websocketdemo目录,而后创立MyWebsocketConfig.java

package com.ben.websocketdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class MyWebsocketConfig implements WebSocketConfigurer {

    @Autowired
    MyWebsocketHandler myWebsocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myWebsocketHandler,"/bensocket").setAllowedOrigins("*");
    }
}

留神下面的配置文件,两点

  • 增加注解 @EnableWebSocket 示意开启了webocket服务
  • registerWebSocketHandlers 这个办法用来注册websocket服务,下面示意将门路 /bensocket 的申请转发到 myWebsocketHandler

2. WebSocketHandler 解决类

myWebsocketHandler 能够实现了WebSocketHandler接口,在WebSocket连贯建设或者断开、收到音讯或者收到谬误的时候这些办法会被调用( 这里就不示范了 )。如果你感觉回调太多或者不好用,能够继承AbstractWebSocketHandler类,只实现本人想要的办法:

在src/main/websocketdemo目录创立MyWebsocketHandler.java

package com.ben.websocketdemo;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.BinaryMessage;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.AbstractWebSocketHandler;

import java.nio.ByteBuffer;

@Component
public class MyWebso<span style="color:transparent">来源gaodai#ma#com搞*代#码网</span>cketHandler extends AbstractWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("afterConnectionEstablished");
    }

    // 发送文本音讯
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
         String msg = message.getPayload();

        // 向客户端发送数据
        session.sendMessage(new TextMessage("你好哦: " + msg));
    }

    // 发送二进制音讯
    @Override
    protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
        ByteBuffer byteBuffer = message.getPayload();
        session.sendMessage(new BinaryMessage(byteBuffer));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        System.out.println("afterConnectionClosed");
    }
}

返回数据则是借助WebSocketSession即与客户端之间的会话,来发送数据的

3. 测试

装置繁难的命令行WebSocket客户端

npm install -g ws wscat

npm 须要装置下nodejs 官网下载安装即可

而后执行

wscat -c ws://127.0.0.1:8080/bensocket

如果遇到提醒 零碎禁止运行脚本(win10)
解决办法: 以管理员形式关上powershell 运行命令:set-ExecutionPolicy RemoteSigned

既然两边能够收发音讯了,能够定义音讯格局,比较简单的做法是应用文本音讯,发送JSON对象。
也可应用 protobuf 来发送承受数据 前面有工夫再写个demo


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:IDEA-Spring-Boot-Gradle-websocket-入门笔记

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址