您好,登錄后才能下訂單哦!
使用tomcat方式實現(xiàn)websocket即時通訊服務端講解
第一種方案:使用Tomcat的方式實現(xiàn)
tomcat版本要求:tomcat7.0+。需要支持Javaee7
導入javeee-api的jar(如果已經(jīng)引入可以忽略):
pom.xml中加入:
?<dependency>
??????<groupId>javax</groupId>
??????<artifactId>javaee-api</artifactId>
??????<version>7.0</version>
??????<scope>provided</scope>
?</dependency>
一:幾個重要的注解(方法):
1.1:@ServerEndpoin():
聲明這是一個websocket服務;
需要指定訪問該服務的地址。
在地址中可以指定參數(shù),需要使用{}進行占位。
注解使用位置:類上面
示例:
@ServerEndpoin("/websocket/{userId}")
public class myTest(){
}
1.2:@OnOpen:
該方法將在建立連接后執(zhí)行,會傳入session對象;
可以通過@PathParam來獲取url聲明中參數(shù)
注解使用位置:方法中
用法示例:
public void onOpen(Session session,@PathParam("userId") Integer userId) throws IOExcepthon{}
1.3:@OnClose:
該方法是在連接關閉后執(zhí)行的
注解位置:方法上
使用示例:
public void onClose(){}
1.4:@OnMessage:
該方法用于接收客戶端發(fā)來的消息
參數(shù):
message:發(fā)來的消息數(shù)據(jù)
session:會話對象(也即是通道)
注解位置:方法
示例用法:
public void onMessage(String message,Session session) throws IOException{}
1.5:@OnError:
出錯的時候訪問的。
注解位置:方法上
使用示例:
public void onError(Session session,Throwable error){}
1.6:給客戶端返回消息(或是給客戶端發(fā)送消息):
使用session對象的getBasinRemoter().sendTest()方法
用法示例:
session.getBasicRemoter().sendText("您發(fā)送的消息已經(jīng)收到了");
二:根據(jù)上面幾個重要方法,編寫客戶端代碼:
@OnOpen
public void onOpen(Session session, @PathParam("userName") String userName) throws IOException {
log.info("=== 打開連接了===");
session.getBasicRemote().sendText("歡迎:"+userName+"訪問系統(tǒng)");
}
@OnMessage
public void onMessage(String message,Session session, @PathParam("userName") String userName) throws IOException {
log.info("==接收到客戶端發(fā)來的消息是:{}",message);
session.getBasicRemote().sendText("您好:"+userName+" 您發(fā)送的消息"+message+",系統(tǒng)已經(jīng)收到....");
}
訪問效果:
說明:websocket訪問的協(xié)議是ws://而非http://
上圖中:橙色的是我發(fā)送的,下面對應的就是系統(tǒng)返回的。
查看服務器日志打?。?/p>
我們可以看到,通信已經(jīng)建立了。代碼已經(jīng)放在git上了。歡迎大家一起學習。
下節(jié)預告:下節(jié)我們將使用spring框架來整合websocket的
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。