WebSocket

打印 上一主题 下一主题

主题 976|帖子 976|积分 2928

maven

  1.                 <dependency>
  2.             <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-websocket</artifactId>
  4.         </dependency>
复制代码
配置类

  1. package com.sky.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.socket.server.standard.ServerEndpointExporter;
  5. /**
  6. * WebSocket配置类,用于注册WebSocket的Bean
  7. */
  8. @Configuration
  9. public class WebSocketConfiguration {
  10.     @Bean
  11.     public ServerEndpointExporter serverEndpointExporter() {
  12.         return new ServerEndpointExporter();
  13.     }
  14. }
复制代码
WebSocketServer

  1. package com.sky.websocket;
  2. import org.springframework.stereotype.Component;
  3. import javax.websocket.OnClose;
  4. import javax.websocket.OnMessage;
  5. import javax.websocket.OnOpen;
  6. import javax.websocket.Session;
  7. import javax.websocket.server.PathParam;
  8. import javax.websocket.server.ServerEndpoint;
  9. import java.util.Collection;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. /**
  13. * WebSocket服务
  14. */
  15. @Component
  16. @ServerEndpoint("/ws/{sid}")
  17. public class WebSocketServer {
  18.     //存放会话对象
  19.     private static Map<String, Session> sessionMap = new HashMap();
  20.     /**
  21.      * 连接建立成功调用的方法
  22.      */
  23.     @OnOpen
  24.     public void onOpen(Session session, @PathParam("sid") String sid) {
  25.         System.out.println("客户端:" + sid + "建立连接");
  26.         sessionMap.put(sid, session);
  27.     }
  28.     /**
  29.      * 收到客户端消息后调用的方法
  30.      *
  31.      * @param message 客户端发送过来的消息
  32.      */
  33.     @OnMessage
  34.     public void onMessage(String message, @PathParam("sid") String sid) {
  35.         System.out.println("收到来自客户端:" + sid + "的信息:" + message);
  36.     }
  37.     /**
  38.      * 连接关闭调用的方法
  39.      *
  40.      * @param sid
  41.      */
  42.     @OnClose
  43.     public void onClose(@PathParam("sid") String sid) {
  44.         System.out.println("连接断开:" + sid);
  45.         sessionMap.remove(sid);
  46.     }
  47.     /**
  48.      * 群发
  49.      *
  50.      * @param message
  51.      */
  52.     public void sendToAllClient(String message) {
  53.         Collection<Session> sessions = sessionMap.values();
  54.         for (Session session : sessions) {
  55.             try {
  56.                 //服务器向客户端发送消息
  57.                 session.getBasicRemote().sendText(message);
  58.             } catch (Exception e) {
  59.                 e.printStackTrace();
  60.             }
  61.         }
  62.     }
  63. }
复制代码
来单提醒

用户下单乐成后,需要第一时间通知外卖商家,通知有两种:语音弹幕 弹出提示框
消息分为两种:来单提醒 和 客户催单
在paysuccess后面加
  1. //通过websocket向客户端推送数据  type orderId  content
  2. Map map=new HashMap<>();
  3. map.put("type",1);//1  表示来电提醒  2表示客户催单
  4. map.put("orderId",ordersDB.getId());
  5. map.put("content","订单号: "+outTradeNo);
  6. String json= JSON.toJSONString(map);
  7. webSocketServer.sendToAllClient(json);
复制代码
客户催单

Controller层
  1. /*
  2. \* 客户催单
  3. \* */
  4. @GetMapping("/reminder/{id}")
  5. @ApiOperation("客户催单")
  6. public Result reminder(@PathVariable("id") Long id){
  7.        orderService.reminder(id);
  8.   return Result.success();
  9. }
复制代码
service层
  1. /*
  2. \* 客户催单
  3. \* */
  4. @Override
  5. public void reminder(Long id) {
  6.   // 根据id查询订单
  7.   Orders ordersDB = orderMapper.getById(id);
  8.   // 校验订单是否存在,并且状态为4
  9.   if (ordersDB == null) {
  10.      throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
  11.   }
  12.   Map map=new HashMap<>();
  13.   map.put("type",2);//1表示来单提醒  2表示客户催单
  14.   map.put("orderId",id);
  15.   map.put("content","订单号: "+ordersDB.getId());
  16.   //调用webSocket向客户端浏览器发送消息
  17.   webSocketServer.sendToAllClient(JSON.toJSONString(map));
  18. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表