• vue使用websocket与springboot通信


    WebSocket是HTML5下一种新的协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的

    在很多项目中,都要用到websocket,使得前端页面与后端页进行实时通信,例如,实时查询订单状态、设备状态实时显示到页面。本博文,分为前端页面代码和后端页面代码,在最后有源代码下载链接。前端使用用vue技术,后端使用springboot

    一、后端代码
    1、websocket代码
    1. @Slf4j
    2. @Component
    3. @ServerEndpoint(value = "/websocket/order")
    4. public class WebsocketProvider {
    5. /**
    6. * 连接事件,加入注解
    7. * @param session
    8. */
    9. @OnOpen
    10. public void onOpen(Session session) {
    11. String orderId = WebsocketUtil.getParam(WebsocketUtil.sessionKey, session);
    12. log.info("Websocket连接已打开,当前orderId为:"+orderId);
    13. // 添加到session的映射关系中
    14. WebsocketUtil.addSession(orderId, session);
    15. //测试发送消息
    16. WebsocketUtil.sendMessage(orderId, AjaxResult.success("恭喜,已建立连接"));
    17. }
    18. /**
    19. * 连接事件,加入注解
    20. * 用户断开链接
    21. * @param session
    22. */
    23. @OnClose
    24. public void onClose(Session session) {
    25. String orderId = WebsocketUtil.getParam(WebsocketUtil.sessionKey, session);
    26. // 删除映射关系
    27. WebsocketUtil.removeSession(orderId);
    28. }
    29. /**
    30. * 当接收到用户上传的消息
    31. * @param session
    32. */
    33. @OnMessage
    34. public void onMessage(Session session, String message) {
    35. log.info("收到Websocket消息:"+message);
    36. }
    37. /**
    38. * 处理用户活连接异常
    39. * @param session
    40. * @param throwable
    41. */
    42. @OnError
    43. public void onError(Session session, Throwable throwable) {
    44. try {
    45. if (session.isOpen()) {
    46. session.close();
    47. }
    48. } catch (IOException e) {
    49. e.printStackTrace();
    50. }
    51. throwable.printStackTrace();
    52. }
    53. }
    2、controller发送代码
    1. @Slf4j
    2. @RestController
    3. @RequestMapping("/send")
    4. @Api(tags = "SendController", description = "发送管理")
    5. public class SendController {
    6. /**
    7. * 相关信息
    8. *
    9. */
    10. @GetMapping
    11. public String getPayType(String data) {
    12. WebsocketUtil.sendMessage("123456", AjaxResult.success(data));
    13. return "发送成功";
    14. }
    15. }
    3、后端向前端发送消息代码
    1. /**
    2. * 根据用户ID发送消息
    3. *
    4. * @param result
    5. */
    6. public static void sendMessage(String sessionId, AjaxResult result) {
    7. sendMessage(sessionId, JSON.toJSONString(result));
    8. }
    9. /**
    10. * 根据用户ID发送消息
    11. *
    12. * @param message
    13. */
    14. public static void sendMessage(String sessionId, String message) {
    15. Session session = ONLINE_SESSION.get(sessionId);
    16. //判断是否存在该用户的session,判断是否还在线
    17. if (session == null || !session.isOpen()) {
    18. return;
    19. }
    20. sendMessage(session, message);
    21. }
    二、VUE前端代码
    1、界面代码
    1. <div style="display: flex;">
    2. <el-input v-model="sendData" placeholder="请输入要发送的内容"/>
    3. <el-button type="success" @click="send" style="margin-left: 20px;">发送</el-button>
    4. </div>
    5. <div style="margin-top: 25px;margin-bottom: 5px;font-weight: bold;">收到的消息:</div>
    6. <div v-for="(item,index) in messages">
    7. <span>{{item}}</span>
    8. </div>
    2、websocket相关代码
    1. console.log('进入状态监听*******')
    2. var url = payServerUrl+"?orderId="+orderId;
    3. //建立webSocket连接
    4. proxy.websocket = new WebSocket(url);
    5. //打开webSokcet连接时,回调该函数
    6. proxy.websocket.onopen = () =>{
    7. console.log("连接建立");
    8. }
    9. //关闭webSocket连接时,回调该函数
    10. proxy.websocket.onclose = () =>{
    11. console.log("连接关闭");
    12. }
    13. //接收信息
    14. proxy.websocket.onmessage = function (res) {
    15. var obj = eval('(' + res.data + ')');
    16. console.log(obj)
    17. proxy.messages.push(res.data)
    18. }
    三、测试
    1、后端服务启动,运行ServerApplication (运行前,maven先下载依赖包)

    2、前端服务启动

    window,运行cmd命令,进行前端页面文件夹,执行如下命令

    (1)1、安装依赖包
    npm install
    (2)、启动服务
    npm run dev

    打开页面 :http://localhost:6080/#/index3、前端页向后端发送数据
    4、后端向前端页面发送数据

    ​使用apifox来发发送请求,apifox百度下载即可
    GET请求,http://localhost:8080/ck/send,数据为data

    4、源代码:

    链接:https://pan.baidu.com/s/1YnuBFQBt2O4GIdcs4jO1SA?pwd=8ahq 
    提取码:8ahq

  • 相关阅读:
    【滤波跟踪】基于变分贝叶斯卡尔曼滤波器实现目标跟踪附matlab代码
    Cookie 和 Session
    Git 的基本概念和使用方式
    查找算法.
    JavaWeb篇_11——HttpServletResponse对象
    论文多级编号-word2010
    vis 右键节点展开菜单
    “AURORA-M:首个遵循人类审查安全指令微调的开源多语言模型
    每日一练 | 华为认证真题练习Day130
    基于SSM的校园学生管理系统的设计与实现
  • 原文地址:https://blog.csdn.net/hekf2010/article/details/134277673