websocket统计在线人数

**

后端代码

**`package gds.application.gds.webSorce;

import gds.application.gds.httpclient.RemoteAccess;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ObjectUtils;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**

  • @ClassName SystemWebSocketHandler

  • @Description:

  • @Author: LWJ

  • @CreateDate: 2021/6/10 14:20
    /
    @ServerEndpoint("/websocket")
    public class SystemWebSocketHandler {
    private final static Logger log = LoggerFactory.getLogger(SystemWebSocketHandler.class);
    /
    *

    • 内容集合
      */
      public static Map contentMap=new HashMap<>();
      // 与某个客户端的连接会话,需要通过它来给客户端发送数据
      private Session session;

    /**

    • 连接建立成功调用的方法
    • @param session
    •        可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
      

    */
    @OnOpen
    public void onOpen(Session session) {
    this.session = session;
    Map<String, List> requestParameterMap = session.getRequestParameterMap();
    //关闭时从链接获取content的ID
    List contentids = requestParameterMap.get(“content_id”);
    if (contentids!=null&&contentids.size()>0) {
    String contentId = contentids.get(0);
    if (ObjectUtils.isEmpty(contentMap.get(contentId))){
    contentMap.put(contentId,session);
    }
    }
    log.info(“有新连接加入!当前在线人数为” + getOnlineCount());
    }

    /**

    • 连接关闭调用的方法
      */
      @OnClose
      public void onClose(Session session) {
      Map<String, List> requestParameterMap = session.getRequestParameterMap();
      //关闭时从链接获取content的ID
      List contentids = requestParameterMap.get(“content_id”);
      if (contentids!=null&&contentids.size()>0){
      String contentId=contentids.get(0);
      contentMap.remove(contentId);
      }
      log.info(“有一连接关闭!当前在线人数为” + getOnlineCount());
      }

    public static synchronized int getOnlineCount() {
    return contentMap.size();
    }

}
`

前端代码
content_id 做唯一标识
var websocket = null;
//判断当前浏览器是否支持WebSocket
if (‘WebSocket’ in window) {
websocket = new WebSocket(“ws://vr.epgc.mtn:8080/websocket?content_id=${accountID}”);
}
else {
alert(‘当前浏览器 Not support websocket’)
}

//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
window.onbeforeunload = function () {
	closeWebSocket();
}

//关闭WebSocket连接
function closeWebSocket() {
	websocket.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值