一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

springmvc+websocket 簡單實現(xiàn)消息即時推送

 _超級賽亞人_ 2016-08-10
1、HandshakeInterceptor 類實現(xiàn)握手,獲取session中的登陸用戶信息,用以區(qū)分WebSocketSession,對指定用戶進(jìn)行推送信息。可使用WebSocketSession對象獲取對應(yīng)的用戶:session.getAttributes().get( "username" )
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
    @Override
    public boolean beforeHandshake( ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,Map<String, Object> attributes ) throws Exception {
        // 獲取登錄用戶
        if ( request instanceof ServletServerHttpRequest ) {
            ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
            HttpSession session = servletRequest.getServletRequest().getSession( false );
            if ( session != null ) {
                // 使用userName區(qū)分WebSocketHandler,以便定向發(fā)送消息
                String username = (String) session.getAttribute( "username" );
                attributes.put( "username", username );
            }
        }
        return true;
    }

    @Override
    public void afterHandshake( ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex ) {  }}
2、MyWebSocketHandler類:消息處理類,需要實現(xiàn)WebSocketHandler接口。定義靜態(tài)變量users集合,記錄當(dāng)前登錄用戶的WebSocketSession信息。


public class WebsocketEndPoint implements WebSocketHandler {

    private static final ArrayList<WebSocketSession> users;

    static {
        users = new ArrayList<WebSocketSession>();
    }

    @Override
    public void afterConnectionEstablished( WebSocketSession session ) throws Exception {
        users.add( session );
        String username = (String) session.getAttributes().get( "username" );
        System.out.println( username + "登陸成功" );
    }

    @Override
    public void handleMessage( WebSocketSession session, WebSocketMessage<?> message ) throws Exception {
        // TODO Auto-generated method stub
        System.out.println( "接收到用戶:" + (String) session.getAttributes().get( "username" ) + " 發(fā)送的信息:"
            + message.getPayload().toString() );
        sendMessageToUser( "dave", new TextMessage( (String) session.getAttributes().get( "username" ) + "發(fā)送給您:"
            + message.getPayload() ) );
    }

    @Override
    public void handleTransportError( WebSocketSession session, Throwable exception ) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterConnectionClosed( WebSocketSession session, CloseStatus closeStatus ) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean supportsPartialMessages() {
        // TODO Auto-generated method stub
        return false;
    }

    public void sendMessageToUser( String username, TextMessage message ) throws IOException {
        for ( WebSocketSession user : users ) {
            if ( username.equals( user.getAttributes().get( "username" ) ) ) {
                user.sendMessage( message );
            }
        }
    }
}
3、springmvc配置文件
<bean id="websocket" class="com.websocket.websocket.MyWebSocketHandler"/>  
<websocket:handlers>
   <websocket:mapping path="/ws" handler="websocket"/>  
   <websocket:handshake-interceptors>  
   <bean class="com.websocket.websocket.HandshakeInterceptor"/>  
   </websocket:handshake-interceptors>  
</websocket:handlers>
4、html頁面:
//判斷當(dāng)前瀏覽器是否支持websocket
if('WebSocket' in window){
websocket = new WebSocket("ws://localhost:8080/wesocket/ws");
}else{
alert("non-support");
}
  //連接發(fā)生錯誤
websocket.onerror = function(){
alert("error connect");
};
//連接成功
websocket.onopen = function(){
alert("open connnect");
};
//接收到的消息
websocket.onmessage = function(event){
alert(event.data);
};
//連接關(guān)閉
websocket.onclose = function(){
alert("close");
websocket.close();
};
  })
 
  //發(fā)送消息
  $("#sendBtn").click(function(){
  websocket.send("我是admin用戶");
  })

資料參考網(wǎng)址:
http://www.cnblogs.com/winkey4986/p/5478332.html
http://www./posts/view/21

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    女人精品内射国产99| 久久精品国产熟女精品| 日韩午夜福利高清在线观看| 欧美日韩亚洲综合国产人| 黄片免费观看一区二区| 国产麻豆精品福利在线| 亚洲综合色在线视频香蕉视频| 亚洲中文字幕熟女丝袜久久| 久久精视频免费视频观看| 午夜国产精品福利在线观看 | 国产精品一区二区三区黄色片| 在线视频免费看你懂的| 国产一区日韩二区欧美| 日韩欧美在线看一卡一卡| 深夜视频在线观看免费你懂| 欧美日本道一区二区三区| 色丁香一区二区黑人巨大| 国产精品视频一区麻豆专区| 亚洲精品国产精品日韩| 成人精品视频在线观看不卡| 午夜精品福利视频观看| 日本免费一本一二区三区| 大胆裸体写真一区二区| 成人日韩视频中文字幕| 色欧美一区二区三区在线| 亚洲性生活一区二区三区| 欧美精品久久一二三区| 欧美午夜国产在线观看| 国产亚洲精品一二三区| 亚洲一区二区三区四区性色av| 日韩高清一区二区三区四区 | 国产又粗又猛又大爽又黄| 激情五月激情婷婷丁香| 在线免费国产一区二区| 99热中文字幕在线精品| 中文字幕欧美精品人妻一区| 国产一区二区三区四区免费| 久久99夜色精品噜噜亚洲av| 老司机精品线观看86| 五月综合婷婷在线伊人| 日本午夜乱色视频在线观看|