微信wss連接webSocket


idea+spring boot +jdk1.8

 

1:WebSocket創建

  在web項目啟動后,啟動WebSocket

@Component
public class ApplicationInit implements CommandLineRunner, ApplicationListener<ApplicationEvent> {
    private static Log logger = LogFactory.getLog(ApplicationInit.class);

    @Override
    public void run(String... args) {
        System.out.println("------------------------ Spring初始化完畢 ------------------------");
        logger.error("---" + Arrays.toString(args) + "---");
        WsPool.startWebsocketInstantMsg();
    }
}

  2:啟動webSocket的方法

   /**
     * 啟動websocket
     */
    public static void startWebsocketInstantMsg() {

        System.out.println("startWebsocketInstantMsg:System");
        InetSocketAddress inetSocketAddress = new InetSocketAddress(10000);  //端口號
        WebSocketImpl.DEBUG = false;
        MyWebScoket webScoket;
        webScoket = new MyWebScoket(inetSocketAddress);

        webScoket.start();
        System.out.println("----------websocket啟動成功---------------");
        InetAddress address = inetSocketAddress.getAddress();
        String hostName = inetSocketAddress.getHostName();
        int port = inetSocketAddress.getPort();
        System.out.println("inetSocketAddress::address==" + address + "  hostName==" + hostName + "  port==" + port);
    }

 

   因為wss是要經過證書的,就像https一樣,所以要么請求附帶證書,要么使用nginx代理(nginx需要已經配置證書)

 3:配置nginx代理webSocket

 

    location /websocket{
        index index.html index.htm;
        proxy_pass http://localhost:10010;
        include proxy.conf;        // 其他的通用的代理設置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;  // webSocket需要的獨有的頭部設置 proxy_set_header Connection “Upgrade”;
    }

 

  加上:  

     proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “Upgrade”;
  (模擬WebSocket的頭部請求信息)
4:請求
  http://
域名/
websocket  nginx自動將請求轉發到 10000 端口

 

 

附:前端連接后端WebSocket觸發的方法

 /**
     *建立連接
     *
     * @param conn
     * @param handshake
     */
    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        System.out.println("onOpen::連接成功");
        // wss連接的時候觸發的代碼
        String openId = handshake.getFieldValue("openId");  //此處可以獲取前端傳入的參數

        this.userJoin(openId, conn);
    }
  /**
     * 關閉連接
     *
     * @param conn   關閉連接的用戶
     * @param code   密碼
     * @param reason 原因
     * @param remote 返回遠程主機是否啟動了連接的關閉。
     */
    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        //斷開連接時候觸發代碼
        System.out.println("onClose::斷開連接");
        userLeave(conn);
        System.out.println(reason);
    }
  /**
     *  接收到前端的消息
     *
     * @param conn    遠程主機(用戶)
     * @param message 消息
     */
    @Override
    public void onMessage(WebSocket conn, String message) {
        System.out.println("接收消息:" + message);
        JSONObject jsonObject = JsonUtils.parseString(message);

    }
 // 出現異常
@Override
public void onError(WebSocket conn, Exception ex) { //錯誤時候觸發的代碼 System.out.println("on error"); ex.printStackTrace(); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM