首页 > 其他分享 >Websocket服务监听收发消息

Websocket服务监听收发消息

时间:2024-03-13 21:29:05浏览次数:16  
标签:Websocket log 收发 session ws org import 监听 客户端

1.pom依赖坐标

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

2.项目配置端口和项目包名

application.properties

server.port=8088
//路径规范:为应用的所有servlet提供一个统一的前缀,使URL结构更加清晰和一致
server.servlet.context-path=/rxtxcommon

2.创建处理器

import com.fazecast.jSerialComm.SerialPort;
import com.groupname.rxtxcommon.service.SerialPortService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.util.List;
import java.util.Map;


@Component
public class WebSocketHandler extends TextWebSocketHandler {

    private static Logger log = LoggerFactory.getLogger(WebSocketHandler.class);
    //和客户端建立连接
    @Override
    public void afterConnectionEstablished(WebSocketSession session) {
        log.info("和客户端建立连接"+session.getId());
	    //初始建立连接业务逻辑处理
		。。。。。。
		。。。。。。  
    }

    //和客户端断开连接
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        log.info("和客户端断开连接");
       //断开连接业务逻辑处理
		。。。。。。
		。。。。。。
        super.afterConnectionClosed(session, status);	    
    }

    // 获取客户端发来的消息并响应消息
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String receObjStr = message.getPayload();
        log.info("sessionID==="+session.getId());
		//接收客户端消息进行业务逻辑处理
		。。。。。。
		。。。。。。        
        // 发送消息给客户端
        session.sendMessage(new TextMessage("字符串"));
    }
	
	//异常处理
	@Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        session.close(CloseStatus.SERVER_ERROR);
        log.error("连接异常", exception);
    }
}

3.注册处理器

@Configuration
@EnableWebSocket
public class WebSocketServerConfigure implements WebSocketConfigurer {

    @Autowired
    private WebSocketHandler webSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    	//前端用websocket建立连接
        registry.addHandler(webSocketHandler, "/websocket");
            //这是另一种方式,但是前端用SockJS建立连接
//        registry.addHandler(webSocketHandler, "/websocket").withSockJS();
    }
}

4.前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>WebSocket客户端</title>
    <script src="https://cdn.bootcss.com/sockjs-client/0.3.4/sockjs.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<style>
    .jumbotron {
        width: 100%;
    }

    #text {
        height: 3rem;
        font-size: 1rem;
        line-height: 3rem;
        margin: 1rem;
    }

    .btn {
        margin-right: 5px;
    }

    #connect {
        margin-left: 1rem;
    }

    #log {
        margin: 1rem 0 0 1rem;
    }

</style>
<div class="container">
    <div class="row">
        <div class="jumbotron">
            <input type="text" placeholder="请输入你想传输的内容" id="text" class="col-lg-12"/>
            <input type="button" value="连接" class="btn btn-info" id="connect" onclick="connect()"/>
            <input type="button" value="发送" class="btn btn-success" id="sent" disabled="disabled" onclick="sent()"/>
            <input type="button" value="断开" class="btn btn-danger" id="disconnect" disabled="disabled"
                   onclick="disconnect()"/>
            <div id="log">
                <p>聊天记录:</p>
            </div>
            <input type="button" value="" class="btn btn-success" id="openCom" disabled="disabled"
                   onclick="getCommSer()"/>
        </div>
    </div>
</div>
<script type="text/javascript">
    let text = document.querySelector('#text');
    let connectBtn = document.querySelector("#connect");
    let sentBtn = document.querySelector("#sent");
    let disconnectBtn = document.querySelector("#disconnect");
    let logDiv = document.querySelector("#log");
    let ws = null;
    
    function connect(operNum) {
        debugger
        //rxtxcommon是springboot项目的包名
		//application.properties
		//server.port=8088
		//server.servlet.context-path=/rxtxcommon        
		
        ws = new WebSocket("ws://localhost:8088/rxtxcommon/websocket")       
        ws.onopen = function () {
        //如果与后端websocket成功建立连接那么onopen 函数会触发
            setConnected(true);
            log('和服务端连接成功!');
        };
        
        // 监听服务端返回的消息
        ws.onmessage = function(event) {
            console.log("测试接收服务器信息"+event)
            log('收到服务端消息:' + event.data);
        };
    }

    function sent() {
        if (ws != null) {
            ws.send(text.value);
            log('客户端说:' + text.value);
        } else {
            log('请先建立连接!')
        }
    }

    function disconnect() {
        if (ws != null) {
            ws.close();
            ws = null;
        }
        setConnected(false);
    }

    function log(value) {
        let content = document.createElement('p');
        content.innerHTML = value;
        logDiv.appendChild(content);
        text.value = '';
    }

    function setConnected(connected) {
        connectBtn.disabled = connected;
        disconnectBtn.disabled = !connected;
        sentBtn.disabled = !connected;
    }

</script>
</body>
</html>

标签:Websocket,log,收发,session,ws,org,import,监听,客户端
From: https://blog.csdn.net/beiback/article/details/136690486

相关文章

  • 【WCH蓝牙系列芯片】-基于CH582开发板—蓝牙主机睡眠模式,串口唤醒收发数据
    -------------------------------------------------------------------------------------------------------------------------------------  在使用蓝牙主机的时候,有时需要通过宏定义开启睡眠模式,从而达到降低芯片的功耗。蓝牙的睡眠是由协议栈自行管理的,在芯片睡眠状态......
  • JS 监听浏览器各个标签间的切换-visibilitychange事件介绍
    文章目录一、JS监听浏览器各个标签间的切换二、document的可见性属性三、示例:监听标签,控制视频播放与暂停一、JS监听浏览器各个标签间的切换以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现......
  • 数据收发卡设计方案:428-基于XC7Z100+ADRV9009的双收双发无线电射频板卡 5G小基站 无线
    基于XC7Z100+ADRV9009的双收双发无线电射频板卡一、板卡概述    基于XC7Z100+ADRV9009的双收双发无线电射频板卡是基于Xilinx ZYNQ FPGA和ADI的无线收发芯片ADRV9009开发的专用功能板卡,用于5G小基站,无线图传,数据收发等领域。 二、板卡原理及功能   板卡使用XC......
  • WPF 实现文件/文件夹监听工具
    参考gpt环境软件/系统版本说明WindowsWindows10专业版22H219045.4046MicrosoftVisualStudioMicrosoftVisualStudioCommunity2022(64位)-17.6.5Microsoft.NetSDK8.0.101手动安装Microsoft.NetSDK7.0.306MicrosoftVisualStudio......
  • vue3 监听鼠标点击拖动事件,移动端滑动事件,页面指针坐标事件
    PointerEventsAPI是Hmtl5的事件规范之一,它主要目的是用来将鼠标(Mouse)、触摸(touch)和触控笔(pen)三种事件整合为统一的API。Pointer指可以在屏幕上反馈一个指定坐标的输入设备。PointerEvent事件和TouchEventAPI对应的触摸事件类似,它继承扩展了TouchEvent,因此拥有TouchEven......
  • zookeeper源码(10)node增删改查及监听
    本文将从leader处理器入手,详细分析node的增删改查流程及监听器原理。回顾数据读写流程leaderZookeeperServer.processPacket封装Request并提交给业务处理器LeaderRequestProcessor做本地事务升级PrepRequestProcessor做事务准备ProposalRequestProcessor事务操作发proposal......
  • Vue — 监听器(watch)使用
    在Vue.js中,watch选项用于监视数据的变化,并在数据变化时执行相应的操作。watch可以监视一个或多个数据的变化,当被监视的数据发生变化时,可以触发预定义的回调函数。一、简单写法<textareaname=""id=""cols="30"rows="10"v-model="word"></textarea>watch:{......
  • spring-event-事件监听机制实现
    1.事件监听机制概述1.场景模型版本更新了,新版本需要继承老版本的构件分享、自定义属性、着色数据,以后还可能有其他数据要继承,这些数据之间没有直接联系,就是当模型版本变更的时候,他们各自需要执行。2.涉及的三个对象事件源(提供事件处理时的元数据)这里就是模型版本更新了......
  • NetCore Rtsp视频流转Websocket实现Web实时查看摄像头
    .NetCoreRtsp视频流转Websocket实现Web实时查看摄像头最近工作中遇到需求需要实现这个功能,网上找了很多方案,大都是转为视频文件保存,实时查看的方案倒比较少,最终自己慢慢琢磨了很久在windows系统下实现了,里面的核心思路是:由FFmpeg.AutoGen捕捉Rtsp流视频帧,转为Bitmap,借由Websocke......
  • 使用H5 实现 websocket 实现视频通讯 延迟较大
    发送端<div><canvasid="canvas"></canvas><videoid="srcvideo"></video></div><divid="xs"></div><buttonid="startBtn"onclick="setRecorder(format);&qu......