- 一、java 实现wobsocket 聊天室
- 二、使用步骤
- 1.pom.xml 引入jar包
- 2.java 代码(WsServer.java)
- 3.web 页面代码(room.html)
开发工具:eclipse +jdk8+tomcat8.5+ssm
项目结构如下
网页聊天室界面如下,可以开多个页面
代码如下(示例):
2.java 代码(WsServer.java)javax.websocket javax.websocket-api 1.0 provided
代码如下(示例):
package com.xx.xxx.websocket;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.HashSet;
import java.util.Set;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
@ServerEndpoint("/webSocket/chat/{roomName}")
public class WsServer {
// 使用map来收集session,key为roomName,value为同一个房间的用户集合
// concurrentMap的key不存在时报错,不是返回null
private static final Map> rooms = new ConcurrentHashMap();
@OnOpen
public void connect(@PathParam("roomName") String roomName, Session session) throws Exception {
// 将session按照房间名来存储,将各个房间的用户隔离
if (!rooms.containsKey(roomName)) {
// 创建房间不存在时,创建房间
Set room = new HashSet<>();
// 添加用户
room.add(session);
rooms.put(roomName, room);
} else {
// 房间已存在,直接添加用户到相应的房间
rooms.get(roomName).add(session);
}
System.out.println("有一个用户加入房间聊天");
}
@OnClose
public void disConnect(@PathParam("roomName") String roomName, Session session) {
rooms.get(roomName).remove(session);
System.out.println("有一个用户离开房间");
}
@OnMessage
public void receiveMsg(@PathParam("roomName") String roomName,
String msg, Session session) throws Exception {
System.out.println(" 此处应该有html过滤");
// 此处应该有html过滤
// msg = session.getId() + ":" + msg;
System.out.println(msg);
// 接收到信息后进行广播
broadcast(roomName, msg);
}
// 按照房间名进行广播
public static void broadcast(String roomName, String msg) throws Exception {
System.out.println("按照房间名进行广播");
for (Session session : rooms.get(roomName)) {
session.getBasicRemote().sendText(msg);
}
}
}
3.web 页面代码(room.html)
网络聊天室



