資源簡介
java即時聊天,基于websocket網(wǎng)頁多用戶在線群聊
http://blog.csdn.net/qq_23994787/article/details/77601434

代碼片段和文件信息
package?com.jsx.chat;
import?java.io.IOException;
import?java.text.SimpleDateFormat;
import?java.util.Date;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.concurrent.CopyOnWriteArraySet;
import?javax.websocket.OnClose;
import?javax.websocket.onerror;
import?javax.websocket.OnMessage;
import?javax.websocket.OnOpen;
import?javax.websocket.Session;
import?javax.websocket.server.PathParam;
import?javax.websocket.server.ServerEndpoint;
import?net.sf.json.JSONobject;
/**
?*?聊天服務(wù)器
?*?@author?落塵曦???2017.8.25
?*?@version?v1.0
?*/
@ServerEndpoint(“/websocket/{userId}“)
public?class?ChatServer?{
private?static?final?SimpleDateFormat?DATE_FORMAT?=?new?SimpleDateFormat(“yyyy-MM-dd?HH:mm“); //?日期格式化
//靜態(tài)變量,用來記錄當前在線連接數(shù)。應(yīng)該把它設(shè)計成線程安全的。
private?static?int?onlineCount?=?0;
//concurrent包的線程安全Set,用來存放每個客戶端對應(yīng)的MyWebSocket對象。若要實現(xiàn)服務(wù)端與單一客戶端通信的話,可以使用Map來存放,其中Key可以為用戶標識
private?static?CopyOnWriteArraySet?webSocketSet?=?new?CopyOnWriteArraySet();
//與某個客戶端的連接會話,需要通過它來給客戶端發(fā)送數(shù)據(jù)
private?Session?session;
private?String?userId;
//----------單聊---------用戶id和websocket的session綁定的路由表
????//@SuppressWarnings(“rawtypes“)
????//private?static?Map?routeTable?=?new?HashMap<>();
/**
*?連接建立成功調(diào)用的方法
*?@param?session??可選的參數(shù)。session為與某個客戶端的連接會話,需要通過它來給客戶端發(fā)送數(shù)據(jù)
*/
@OnOpen
public?void?open(@PathParam(“userId“)String?userIdsSession?session)?{
//?添加初始化操作
System.out.println(“---初始化----userId:“+userIds);
this.session?=?session;
//獲取當前登錄用戶的id
this.userId?=?userIds;
webSocketSet.add(this);?????//加入set中
addOnlineCount();???????????//在線數(shù)加1
System.out.println(“有新連接加入!當前在線人數(shù)為“?+?getOnlineCount());
//---------單聊-----------將用戶id和session綁定到路由表
????????//綁定之后就可以在其它地方根據(jù)id來獲取session,這時兩個用戶私聊就可以實現(xiàn)了
????????//routeTable.put(userId?session);
}
/**
?*?接受客戶端的消息,并把消息發(fā)送給所有連接的會話
?*?@param?message?客戶端發(fā)來的消息
?*?@param?session?客戶端的會話
?*/
@OnMessage
public?void?getMessage(String?message?Session?session1)?{
//?把客戶端的消息解析為JSON對象
JSONobject?jsonobject?=?JSONobject.fromobject(message);
//?在消息中添加發(fā)送日期
jsonobject.put(“date“?DATE_FORMAT.format(new?Date()));
//?-----------------------把消息發(fā)送給所有連接的會話--------------------------------
System.out.println(“來自客戶端的消息“+this.userId+“:“?+?message);
????????for(ChatServer?item:?webSocketSet){
?????????????try?{
???????????? ?//當前用戶右側(cè)顯示,非本用戶左側(cè)顯示
???????????? ?if(this.userId.equals(item.userId)){jsonobject.put(“isSelf“?true);}
???????????? ?else{jsonobject.put(“isSelf“?false);}
????? ?//?發(fā)送JSON格式的消息
???????????? ?item.sendMessage(jsonobject.toString());
?????????????}?catch?(IOException?e)?{
?????????????????e.printStackTrace();
?????????????????continue;
?????????????}
?????????}
????????
?????????//--------------群發(fā)2-------------------
//????????for?(Session?sess?:?session.getOpenSessions())?{
//????????????if?(sess.isOpen())
//???????????????sess.getBasicRemote().sendText(msg);
//????????}
}
@OnClose
public?void?close()?{
//?添加關(guān)閉會話時的操作
webSocketSet.remove(this);??//從set中刪除
subO
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-08-26?15:17??Chat\
?????文件????????1097??2017-08-25?00:40??Chat\.classpath
?????目錄???????????0??2017-08-26?15:17??Chat\.externalToolBuilders\
?????文件?????????548??2017-08-24?23:48??Chat\.externalToolBuilders\org.eclipse.wst.jsdt.core.ja
?????文件????????1364??2017-08-24?23:56??Chat\.project
?????目錄???????????0??2017-08-26?15:17??Chat\.settings\
?????文件?????????491??2014-12-29?18:26??Chat\.settings\.jsdtscope
?????文件??????????83??2017-08-24?23:49??Chat\.settings\com.genuitec.eclipse.core.prefs
?????文件??????????76??2017-08-24?23:48??Chat\.settings\com.genuitec.eclipse.migration.prefs
?????文件?????????357??2014-12-29?18:26??Chat\.settings\org.eclipse.jdt.core.prefs
?????文件?????????456??2014-12-29?18:26??Chat\.settings\org.eclipse.wst.common.component
?????文件?????????345??2017-08-24?23:48??Chat\.settings\org.eclipse.wst.common.project.facet.core.xm
?????文件??????????49??2014-12-29?18:26??Chat\.settings\org.eclipse.wst.jsdt.ui.superType.container
?????文件???????????6??2014-12-29?18:26??Chat\.settings\org.eclipse.wst.jsdt.ui.superType.name
?????目錄???????????0??2017-08-26?15:17??Chat\WebContent\
?????目錄???????????0??2017-08-26?15:17??Chat\WebContent\me
?????文件??????????36??2014-12-29?18:26??Chat\WebContent\me
?????目錄???????????0??2017-08-26?15:17??Chat\WebContent\WEB-INF\
?????目錄???????????0??2017-08-26?15:17??Chat\WebContent\WEB-INF\lib\
?????文件??????231320??2014-12-29?18:26??Chat\WebContent\WEB-INF\lib\commons-beanutils-1.8.0.jar
?????文件??????575389??2014-12-29?18:26??Chat\WebContent\WEB-INF\lib\commons-collections-3.2.1.jar
?????文件??????279193??2014-12-29?18:26??Chat\WebContent\WEB-INF\lib\commons-lang-2.5.jar
?????文件???????60841??2014-12-29?18:26??Chat\WebContent\WEB-INF\lib\commons-logging-1.1.1.jar
?????文件???????86487??2014-12-29?18:26??Chat\WebContent\WEB-INF\lib\ezmorph-1.0.6.jar
?????文件??????159123??2014-12-29?18:26??Chat\WebContent\WEB-INF\lib\json-lib-2.4-jdk15.jar
?????文件???????36575??2017-08-24?23:55??Chat\WebContent\WEB-INF\lib\websocket-api.jar
?????目錄???????????0??2017-08-26?15:17??Chat\WebContent\assets\
?????目錄???????????0??2017-08-26?15:17??Chat\WebContent\assets\css\
?????文件????????3049??2014-12-29?18:26??Chat\WebContent\assets\css\admin.css
?????文件??????304221??2014-12-29?18:26??Chat\WebContent\assets\css\amazeui.css
?????文件??????305083??2014-12-29?18:26??Chat\WebContent\assets\css\amazeui.flat.css
............此處省略163個文件信息
評論
共有 條評論