java websocket 创建房间_websocket实现多房间多人在线聊天室

这个博客介绍了一种使用Java WebSocket实现多房间聊天室的方法。通过创建`WebSocketService`类处理用户连接、消息传递和房间管理,以及`ViewController`处理HTTP请求,实现了用户加入、退出房间和发送消息的功能。同时,利用ConcurrentHashMap存储房间和用户,确保并发安全性。
摘要由CSDN通过智能技术生成

b230eb494e3805df21000450b97ed6ba.png

package com.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.SessionAttributes;

@Controller

@RequestMapping("/home")

@SessionAttributes("uname")

public class ViewController {

@RequestMapping("/list")

public String cc(ModelMap model){

return "index";

}

@RequestMapping("/room")

public String h(ModelMap model,String uname,String roomid){

model.put("uname",uname);

model.put("roomid", roomid);

return "room";

}

}

package com.controller;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Map;

import java.util.Set;

import java.util.concurrent.ConcurrentHashMap;

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;

@ServerEndpoint("/websocket/{info}")

public class WebSocketService {

private static SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//创建时间格式对象

//concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketService对象。

//创建一个房间的集合,用来存放房间

private static ConcurrentHashMap> roomList = new ConcurrentHashMap>();

//与某个客户端的连接会话,需要通过它来给客户端发送数据

private Session session;

//重新加入房间的标示;

private int rejoin = 0;

/*static {

roomList.put("room1", new ConcurrentHashMap());

roomList.put("room2", new ConcurrentHashMap());

}*/

/**

* 用户接入

* @param param 连接websocket服务器时穿的参数

* @param session 会话

*/

@OnOpen

public void onOpen(@PathParam(value = "info") String param,Session session){

System.err.println("登录时候穿的参数"+param.toString());

this.session = session;

String flag = param.split("[|]")[0]; //标识

String member = param.split("[|]")[1];//成员名

if(roomList.get(member)==null){//判断房间列表中是否有此次的房间名称

roomList.put(member, new ConcurrentHashMap());//如果没有将房间添加到房间列表中

}

//判断标志位是不是加入房间

if(flag.equals("join")){

String user = param.split("[|]")[2]; //截取用户名

//调用加入房间的方法,传入房间名称和用户名称

joinRoom(member,user);

}

}

/**

* 加入房间

* @param member 房间号

*

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值