002649:websocket的使用及其定義

1、背景html

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

2、具體分析前端

  一、交互的過程則要求前端和後臺都能主動發起請求,這有區別於常見的httpweb

  二、websocket的定義:spring

    一種在單個TCP鏈接上進行全雙工通訊(雙向通訊)的協議後端

  三、概述:跨域

    a、HTML5中提出的     
    b、相比HTTP:       
      b.一、前者一個request一個response,websocket採用的是訂閱模式且客戶端和服務端均可以想對方推送消息。       
      b.二、前者是短鏈接,每次都是一個請求一個響應,而後就結束了。後者採用的是長鏈接(一次驗證,長期有效),websocket實現消息的轉發       

3、實現瀏覽器

  一、端點信息設置websocket

  

 1 @Configuration
 2 @EnableWebSocketMessageBroker //啓動websocket端點
 3 public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 4 
 5     /**
 6      * 握手攔截器
 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")//設置端點名稱
17         .setHandshakeHandler(new MyPrincipalHandshakeHandler()) //設置義用戶和websocket的綁定策略,如新用戶使用session以及用戶的校驗,是否登陸,返回Principal實現類
18         // .setAllowedOrigins("*") // 添加容許跨域訪問
19         // .setAllowedOrigins("http://mydomain.com");
20         .addInterceptors(wsHandShakeInterceptor) // 添加自定義攔截,如握手前設置上下文信息
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");//設置客戶端訂閱消息的基礎邏輯,默認也是這個,前端url中提現
30         registry.enableSimpleBroker("/topic");   // 設置服務端廣播消息的基礎路徑,默認也是這個,後端提現
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

  二、contoller設置session

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

  ps:app

    一、@MessageMapping(「/sendTest」) 接收客戶端發送的信息,發送的url是/app/sendTest(經由消息代理)

    二、@SubscribeMapping(「/subscribeTest」) ,和MessageMapping功能相似,不經由消息代理

    三、@SendTo(「/topic/subscribeTest」)  返回目的地的地址,經由消息代理,全部訂閱改路徑的客戶端都能收到

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

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

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

參見:

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

相關文章
相關標籤/搜索