webSocket简单应用(四、学生查看当前在线课堂)

上一篇中构建了webSocket的基本结构,如何链接如何发送如何关闭。这些功能都只能满足最基本的需求,基本上实现的老师创建房间,学生加入房间并在房间内交流。对于老师端而言通过查找他所教的班级,然后选择要上课的班就可以开设在线课堂了,但是对学生而言必须要知道当前上课老师的房间号才可以进入,而且老师和班级时多对多,学生很难知道到底是那个老师在给他们上课,或者说这个老师有没给他们上课。所以需要这么一个功能,学生能够看到当前他所在班级的在线课堂。

首先在WebSocketRoom类中加入静态变量classMessage用于存储当前的所有的在线课堂信息,里面包括开课的老师房间号,班级号等等其他的信息。

 public static Map<String,String> classMessage = new ConcurrentHashMap();//存储班级信息

这些信息都以json字符串的形式存储在了classMessage中。这样方便前台接收转换。同时也可以让一个map存储跟多的信息

 String classMessage="{roomId:"+roomId+","+"classId:"+classId+","+"sort:"+sort+"}";

接下来需要进行数据交互,为了方便管理我们这里在创建一个webSocket服务类

@Slf4j
@Service
@Component
@ServerEndpoint("/webSocketRoom/{account}")
@DependsOn("springContextUtils")
public class WebSocketClassServiceImpl {
    /** 记录当前在线连接数 */
//    private static AtomicInteger onlineCount = new AtomicInteger(0);
    private Session session;
    @OnOpen
    public void onOpen(Session session) throws IOException {
        Map<String, String> classTeacehr=WebSocketRoom.classMessage;//获取当前房间的信息
        ArrayList<String> classMessage = new ArrayList<String> ();
        for (String account : classTeacehr.keySet()) {
            String message = classTeacehr.get(account);
            classMessage.add(message);
        }
        log.info("向{}发送了{}",session,classMessage.toString());
        session.getAsyncRemote().sendText( classMessage.toString());
    }

    @OnClose
    public void onClose(Session session,@PathParam("account") String account) throws IOException {

    }
    @OnError
    public void onError(Throwable t) throws Throwable {
        log.error("webScoketRoom报错: " + t.toString());
    }


    @OnMessage
    public void onMessage(@PathParam("roomId") String roomId,@PathParam("account") String account,String message){

    }


}

这里可以看到在链接建立的时候我们会遍历当前的在线课堂信息并存储到ArrayList数组中,这里采用ArrayList的理由很简单,灵活度高,而且有自动扩容。之后调用toString方法就将数据变成了json字符串然后发送至前台,前台在对字符串进行处理,查找到里面有学生所在班级的房间信息并渲染出来,之后学生只需要点击班级就可以直接加入房间了

 ArrayList<String> classMessage = new ArrayList<String> ();
 for (String account : classTeacehr.keySet()) {
            String message = classTeacehr.get(account);
            classMessage.add(message);
        }
        log.info("向{}发送了{}",session,classMessage.toString());
        session.getAsyncRemote().sendText( classMessage.toString());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值