JAVA使用WebSocket显示实时在线浏览人数
有时候我们需要在内容详情页实时浏览人数,这时候我们可以使用websocket实现这个功能
pom.xml
- <dependency>
- <groupId>javax</groupId>
- <artifactId>javaee-api</artifactId>
- <version>8.0</version>
- <scope>provided</scope>
- </dependency>
或者jar包
javax.websocket-api-1.0.jar
下载地址:https://yvioo.lanzous.com/i3AXkhl3s3c
配置类
WebSocketConfig.java
- package com.config;
- import javax.websocket.Endpoint;
- import javax.websocket.server.ServerApplicationConfig;
- import javax.websocket.server.ServerEndpointConfig;
- import java.util.Set;
- public class WebSocketConfig implements ServerApplicationConfig {
- @Override
- public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> endpointClasses) {
- return null;
- }
- @Override
- public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {
- //在这里会把含有@ServerEndpoint注解的类扫描加载进来 ,可以在这里做过滤等操作
- return scanned;
- }
- }
- 操作类
ContentWebSocket.java
- package com.websocket;
- import javax.websocket.*;
- import javax.websocket.server.ServerEndpoint;
- import java.io.IOException;
- import java.util.*;
- /**
- * @author 。
- */
- @ServerEndpoint(value = "/content_websocket")
- public class ContentWebSocket {
- /**
- * 内容集合
- */
- public static Map contentMap=new HashMap<>();
- /**
- * 创建
- * @param session
- */
- @OnOpen
- public void onOpen(Session session) {
- }
- /**
- * 发送消息
- * @param contentId
- * @throws IOException
- */
- @OnMessage
- public void sendMessage(Session session,String contentId) {
- List c = (List) contentMap.get(contentId);
- if (c==null){
- c=new ArrayList();
- }
- c.add(session);
- //创建时把当前会话放在集合中,这样集合大小就是实时浏览人数
- contentMap.put(contentId,c);
- broadcast(c,c.size()+"");
- }
- /**
- * 关闭
- */
- @OnClose
- public void onClose(Session session) {
- Map<String, List<String>> requestParameterMap = session.getRequestParameterMap();
- //关闭时从链接获取content的ID
- List<String> contentids = requestParameterMap.get("content_id");
- if (contentids!=null&&contentids.size()>0){
- String contentId=contentids.get(0);
- List c = (List) contentMap.get(contentId);
- if (c!=null){
- //从集合中移除该会话
- c.remove(session);
- contentMap.put(contentId,c);
- broadcast(c,c.size()+"");
- }
- }
- }
- /**
- * 发生错误
- * @param session
- * @param error
- */
- @OnError
- public void onError(Session session, Throwable error) {
- System.out.println("发生错误");
- error.printStackTrace();
- }
- /**
- * 消息广播
- * @param sessions
- * @param msg
- */
- public void broadcast(List<Session> sessions,String msg){
- for (Iterator it=sessions.iterator();it.hasNext();){
- Session session= (Session) it.next();
- try {
- if (session.isOpen()){
- //当当前会话没有被关闭 发送消息
- session.getBasicRemote().sendText(msg);
- }else {
- it.remove();
- }
- } catch (IOException e) {
- e.printStackTrace();
- it.remove();
- }
- }
- }
- }
页面代码
content.html
- <span id="viewing">0</span>人正在看
- <script>
- //观看人数统计
- var ws;
- var target="ws:localhost:8080/content_websocket?content_id=内容ID";
- $(function () {
- //处理浏览器兼容性
- if ('WebSocket' in window) {
- ws = new WebSocket(target);
- } else if ('MozWebSocket' in window) {
- ws = new MozWebSocket(target);
- } else {
- alert('WebSocket is not supported by this browser.');
- return;
- }
- ws.onopen = function () {
- ws.send('${content.id}')
- };
- ws.onmessage = function (event) {
- $("#viewing").html(event.data);
- };
- ws.onclose=function (event) {
- }
- })
- </script>
JAVA使用WebSocket显示实时在线浏览人数的更多相关文章
- Java用WebSocket + tail命令实现Web实时日志
原文:http://blog.csdn.net/xiao__gui/article/details/50041673 在Linux操作系统中,经常需要查看日志文件的实时输出内容,通常会使用tail - ...
- Java模拟实现百度文档在线浏览
Java模拟实现百度文档在线浏览 这个思路是我参考网上而来,代码是我实现. 采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper ...
- java实现在线浏览PDF文档功能
实现在线浏览pdf文档功能(本代码适用于项目服务中固定的并且少量的pdf浏览,比如注册时的注册条款在线浏览等): //设置响应内容类型为PDF类型 response.setContentType(&q ...
- java集成WebSocket向指定用户发送消息
一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...
- Java后端WebSocket的Tomcat实现(转载)
一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...
- [转]使用 HTML5 WebSocket 构建实时 Web 应用
HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...
- 使用 HTML5 WebSocket 构建实时 Web 应用
原文地址:http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/ HTML5 WebSocket 简介和实战演练 本文主要介绍 ...
- springboot搭建一个简单的websocket的实时推送应用
说一下实用springboot搭建一个简单的websocket 的实时推送应用 websocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 我们以前用的http协议只能单 ...
- (转)使用 HTML5 WebSocket 构建实时 Web 应用
HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...
随机推荐
- Codeforces 1383E - Strange Operation(线段树优化 DP or 单调栈+DP)
Codeforces 题目传送门 & 洛谷题目传送门 Yet another 自己搞出来的难度 \(\ge 2800\) 的题 介绍一个奇奇怪怪的 \(n\log n\) 的做法.首先特判掉字 ...
- Codeforces 1483F - Exam(AC 自动机)
Codeforces 题目传送门 & 洛谷题目传送门 一道 ACAM 的 hot tea 首先建出 ACAM.考虑枚举长串,以及短串在长串中出现的最后位置 \(j\),这个复杂度显然是 \(\ ...
- 睡眠或者重启windows,无法ssh连接或者pingVMware的虚机
睡眠后无法直接ssh重连VMware主机问题 这个问题我在win8上出现过,win10看了下同事可以正常连,不知道其他有没有问题. 解决方法: 1.关闭vmnet8和vmnet0里面的 npcap 功 ...
- git添加新账号
1,在linux上添加账号 useradd test passwd test usermod -G gitgroup test 将test账号的组改为和git一样的组gitgroup git所在 ...
- karatsuba乘法
karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.[1] 此算法主要用于两个 ...
- 为 Rainbond Ingress Controller 设置负载均衡
Rainbond 作为一款云原生应用管理平台,天生带有引导南北向网络流量的分布式网关 rbd-gateway.rbd-gateway 组件,实际上是好雨科技团队开发的一种 Ingress Contro ...
- day27 网络编程
1.OSI七层协议 1.七层划分为:应用层,表示层.会话层.传输层.网络层.数据链路层.物理层 2.五层划分:应用层.传输层.网络层.数据链路层.物理层 应用层: 表示层: 会话层: 传输层:四层交换 ...
- Spark(二)【sc.textfile的分区策略源码分析】
sparkcontext.textFile()返回的是HadoopRDD! 关于HadoopRDD的官方介绍,使用的是旧版的hadoop api ctrl+F12搜索 HadoopRDD的getPar ...
- js 如何全部替代一个子串为另一个子串
更多描述: 假设有一个字符串 `hello. hello. hello. ` 需要替换为 `AAA`,即把 `hello. ` 替换为 `A` 如果需要全量替换字符串,可以使用 String.prot ...
- Spring的事务传播机制(通俗易懂)
概述 Spring的事务传播机制有7种,在枚举Propagation中有定义. 1.REQUIRED PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就 ...