当前位置: 首页 > article >正文

springCloud使用webSocket(接收端)

此篇文章主要写的我们在springCloud中使用websocket时,接收端写的主要代码。
此篇是小白看的。并详细介绍了应该怎样测试websocket的接收。
以及如果我们需要有自己写的service注入时,在websocket中应该怎样注入。此处我注入的service是deviceService。

import com.apex.iot.device.service.DeviceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.Map;


@Slf4j
@Component
@ServerEndpoint("/iotDataWebsocket")
public class DataWebSocketService {

    private static Map<String,Session> sessionPool = new HashMap<String,Session>();

	// 我们自己写的service不能直接注入,需要这样注入
    private static DeviceService deviceService;
    @Autowired
    public void setDeviceService(DeviceService deviceService) {
        this.deviceService = deviceService;
    }

    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session) {
        log.info("连接成功:{}", session.getId());
        sessionPool.put(session.getId(), session);
    }

    /**
     * 连接关闭调用的方法
     * @param session
     */
    @OnClose
    public void onClose(Session session) {
        String sessionId = session.getId();
        sessionPool.remove(sessionId);
    }

    /**
     * 收到客户端消息后调用的方法
     * @param message 客户端发送过来的消息
     */
    @OnMessage
    public synchronized void onMessage(String message, Session session) {
        log.info("服务端收到客户端[{}]的消息:{}", session.getId(), message);
        try{
        	System.out.println(message);
            this.sendMessage(session.getId(), message);
        }catch (Exception e) {
            log.error("处理消息失败!服务端收到客户端[{}]的消息:{}", session.getId(), message);
        }
    }

    /**
     * 发生错误时调用
     */
    @OnError
    public void onError(Session session, Throwable error) {
        System.out.println("发生错误");
        error.printStackTrace();
    }



    /**
     * 发送消息
     * @param sessionId
     * @param message
     */
    public void sendMessage(String sessionId, String message) {
        Session session = sessionPool.get(sessionId);
        if(session != null) {
            synchronized (session) {
                try{
                	// 你自己的方法
                    String result = deviceService.getDeviceMsgByRedis(message);
                    session.getBasicRemote().sendText(result);
                }catch (Exception e) {
                    e.printStackTrace();
                    log.error("发送消息失败!", e);
                }
            }
        }else{
            log.error("没有找到sessionId:{}", sessionId);
        }
    }




}

应该怎样测试:
给大家两个链接,都是进行测试websocket的。因为我这边洗的都是后台,所以直接用网页进行测试:

https://wstool.jackxiang.com/
http://websocket-test.com/

我用的最多的是第一个链接:https://wstool.jackxiang.com/
在这里插入图片描述
链接里是我们的服务器地址,比如我写的是
ws://localhost:30116/iotDataWebsocket
其中iotDataWebsocket是我们在websocket中定义的,就是在类上的@ServerEndpoint(“/iotDataWebsocket”)
这时候我们有时候会出现连接不上的问题。没关系,更改一下配置:
我们在application.yml中添加

server:
  port: 30116
#  ignored-urls: /**/**
  ignored-urls: /iotDataWebsocket,/device/save,/device/getDeviceMsgById

在ignored-urls中,我们这几个方法可以直接通过网页访问
以上准备工作完成了,就可以进行测试了
我们点击测试工具的开启连接,出现open这一行绿色的字,就说明连接成功,
在这里插入图片描述
点击开始发送按钮,即可进行websocket的发送。当我们看到收到消息的时候,websocket的联调成功了。
在这里插入图片描述


http://www.kler.cn/a/591501.html

相关文章:

  • 基于PMU的14节点、30节点电力系统状态估计MATLAB程序
  • 【数据分享】2000—2024年我国省市县三级逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)
  • Python使用总结之Flask构建文件服务器,通过网络地址访问本地文件
  • 学术论文pdf图片中的公式如何自动识别为word
  • 提升AI性能的秘密武器:量化、蒸馏与剪枝全面解析
  • Python----计算机视觉处理(Opencv:形态学变换)
  • 深度学习视觉BEV 3D目标检测算法综述
  • oracle基础知识之表的集合运算
  • 鸿蒙HarmonyOS Next练手学习项目购物车功能,联动全选反选、数量总计
  • MySQL -- 复合查询
  • Python爬虫-爬取汽车之家燃油车月销量榜数据
  • C# WPF 基础知识学习(六)
  • python-leetcode 47.组合总和
  • 三月九次前端面试复盘:当场景题成为通关密钥
  • ​技术解构麦萌短剧《鸳鸯袖里握兵符》:从「分布式节点崩溃」到「对抗性联邦学习的逆袭」​
  • 如何使用PHP爬虫获取Shopee(虾皮)商品详情?
  • Windows电脑使用VNC跨平台远程控制苹果MacOS电脑桌面解决方案
  • WPS二次开发系列:WPS SDK事件回调
  • Mac下查看dylib库的版本信息
  • 简单循环神经网络(RNN):原理、结构与应用