日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

002649:websocket的使用及其定义

發(fā)布時間:2023/12/13 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 002649:websocket的使用及其定义 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、背景

  1、最近公司要做一個網(wǎng)頁上智能收集投訴信息的功能(客戶端和小蜜(后臺寫死的聊天邏輯)聊天的過程收集投訴信息)。  
  2、流程:消費者按固定流程輸入或選擇投訴信息->確認(rèn)投訴信息->后臺生成和解方案->消費者同意/不同意->商家處理待處理的和解信息->消費者查看商家的處理結(jié)果。

二、具體分析

  1、交互的過程則要求前端和后臺都能主動發(fā)起請求,這有區(qū)別于常見的http

  2、websocket的定義:

    一種在單個TCP連接上進行全雙工通信(雙向通信)的協(xié)議

  3、概述:

    a、HTML5中提出的     
    b、相比HTTP:       
      b.1、前者一個request一個response,websocket采用的是訂閱模式且客戶端和服務(wù)端都可以想對方推送消息。       
      b.2、前者是短連接,每次都是一個請求一個響應(yīng),然后就結(jié)束了。后者采用的是長連接(一次驗證,長期有效),websocket實現(xiàn)消息的轉(zhuǎn)發(fā)       

三、實現(xiàn)

  1、端點信息設(shè)置

  

 1 @Configuration
 2 @EnableWebSocketMessageBroker //啟動websocket端點
 3 public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 4 
 5     /**
 6      * 握手?jǐn)r截器
 7      */
 8     @Autowired
 9     private WsHandShakeInterceptor wsHandShakeInterceptor;
10     /* (non-Javadoc)
11      * @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#registerStompEndpoints(org.springframework.web.socket.config.annotation.StompEndpointRegistry)
12      */
13     @Override
14     public void registerStompEndpoints(StompEndpointRegistry registry) {
15         registry
16         .addEndpoint("/ws")//設(shè)置端點名稱
17         .setHandshakeHandler(new MyPrincipalHandshakeHandler()) //設(shè)置義用戶和websocket的綁定策略,如新用戶使用session以及用戶的校驗,是否登錄,返回Principal實現(xiàn)類
18         // .setAllowedOrigins("*") // 添加允許跨域訪問
19         // .setAllowedOrigins("http://mydomain.com");
20         .addInterceptors(wsHandShakeInterceptor) // 添加自定義攔截,如握手前設(shè)置上下文信息
21         .withSockJS(); //withSockJS允許客戶端利用sockjs進行瀏覽器兼容性處理
22     }
23 
24     /* (non-Javadoc)
25      * @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#configureMessageBroker(org.springframework.messaging.simp.config.MessageBrokerRegistry)
26      */
27     @Override
28     public void configureMessageBroker(MessageBrokerRegistry registry) {
29         registry.setApplicationDestinationPrefixes("/app");//設(shè)置客戶端訂閱消息的基礎(chǔ)邏輯,默認(rèn)也是這個,前端url中提現(xiàn)
30         registry.enableSimpleBroker("/topic");   // 設(shè)置服務(wù)端廣播消息的基礎(chǔ)路徑,默認(rèn)也是這個,后端提現(xiàn)
31 
32 
33         //   Use this for enabling a Full featured broker like RabbitMQ
34 
35         /*
36         registry.enableStompBrokerRelay("/topic")
37                 .setRelayHost("localhost")
38                 .setRelayPort(61613)
39                 .setClientLogin("guest")
40                 .setClientPasscode("guest");
41         */
42     }
43 }

  2、contoller設(shè)置

 1 @Controller
 2 public class WebSocketAction {
 3 
 4     private Logger logger = LoggerFactory.getLogger(this.getClass());
 5 
 6     @MessageMapping("/sendTest")
 7     @SendTo("/topic/subscribeTest") //結(jié)果推送客戶端,訂閱了/topic/subscribeTest的客戶端
 8     public ServerMessage sendDemo(ClientMessage message) {
 9         logger.info("接收到了信息" + message.getName());
10         return new ServerMessage("你發(fā)送的消息為:" + message.getName());
11     }
12 
13     @SubscribeMapping("/subscribeTest")
14     public ServerMessage sub() {
15         logger.info("XXX用戶訂閱了我。。。");
16         return new ServerMessage("感謝你訂閱了我。。。");
17     }
18 
19 }

  ps:

    1、@MessageMapping(“/sendTest”)接收客戶端發(fā)送的信息,發(fā)送的url是/app/sendTest(經(jīng)由消息代理)

    2、@SubscribeMapping(“/subscribeTest”),和MessageMapping功能類似,不經(jīng)由消息代理

    3、@SendTo(“/topic/subscribeTest”) 返回目的地的地址,經(jīng)由消息代理,所有訂閱改路徑的客戶端都能收到

    4、@SendToUser(value = "/topic/greetings",broadcast = false) 與sendTo功能類似,但只有訂閱了改路徑的消息發(fā)起者能收到信息

    5、SimpMessageSendingOperations.convertAndSend("/topic/public", chatMessage) 等價于@SendTo

    6、@Payload 將消息和對象綁定

參見:

  http://www.cnblogs.com/jmcui/p/8999998.html

總結(jié)

以上是生活随笔為你收集整理的002649:websocket的使用及其定义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。