• 大小: 7.18MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-23
  • 语言: Java
  • 标签: 即时聊天  

资源简介

java即时聊天,基于websocket网页多用户在线群聊 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;

/**
 * 聊天服务器
 * @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“); // 日期格式化
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
private String userId;
//----------单聊---------用户id和websocket的session绑定的路由表
    //@SuppressWarnings(“rawtypes“)
    //private static Map routeTable = new HashMap<>();
/**
* 连接建立成功调用的方法
* @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@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();           //在线数加1
System.out.println(“有新连接加入!当前在线人数为“ + getOnlineCount());
//---------单聊-----------将用户id和session绑定到路由表
        //绑定之后就可以在其它地方根据id来获取session,这时两个用户私聊就可以实现了
        //routeTable.put(userId session);
}

/**
 * 接受客户端的消息,并把消息发送给所有连接的会话
 * @param message 客户端发来的消息
 * @param session 客户端的会话
 */
@OnMessage
public void getMessage(String message Session session1) {
// 把客户端的消息解析为JSON对象
JSONobject jsonobject = JSONobject.fromobject(message);
// 在消息中添加发送日期
jsonobject.put(“date“ DATE_FORMAT.format(new Date()));
// -----------------------把消息发送给所有连接的会话--------------------------------
System.out.println(“来自客户端的消息“+this.userId+“:“ + message);
        for(ChatServer item: webSocketSet){
             try {
              //当前用户右侧显示,非本用户左侧显示
              if(this.userId.equals(item.userId)){jsonobject.put(“isSelf“ true);}
              else{jsonobject.put(“isSelf“ false);}
       // 发送JSON格式的消息
              item.sendMessage(jsonobject.toString());
             } catch (IOException e) {
                 e.printStackTrace();
                 continue;
             }
         }
        
         //--------------群发2-------------------
//        for (Session sess : session.getOpenSessions()) {
//            if (sess.isOpen())
//               sess.getBasicRemote().sendText(msg);
//        }

}


@OnClose
public void close() {
// 添加关闭会话时的操作
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.javascriptValidator.launch
     文件        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.xml
     文件          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\meta-INF\
     文件          36  2014-12-29 18:26  Chat\WebContent\meta-INF\MANIFEST.MF
     目录           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个文件信息

评论

共有 条评论