web socket

2023-11-06

package com.web;

import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;

/**
* @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,
* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端
*/
@ServerEndpoint("/websocket")
public class WebSocketTest {
//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
private static int onlineCount = 0;

//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>();

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

/**
* 连接建立成功调用的方法
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this); //加入set中
addOnlineCount(); //在线数加1
System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
}

/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(){
webSocketSet.remove(this); //从set中删除
subOnlineCount(); //在线数减1
System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
}

/**
* 收到客户端消息后调用的方法
* @param message 客户端发送过来的消息
* @param session 可选的参数
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("来自客户端的消息:" + message);
//群发消息
for(WebSocketTest item: webSocketSet){
try {
item.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}

/**
* 发生错误时调用
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error){
System.out.println("发生错误");
error.printStackTrace();
}

/**
* 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
* @param message
* @throws IOException
*/
public void sendMessage(String message) throws IOException{
this.session.getBasicRemote().sendText(message);
//this.session.getAsyncRemote().sendText(message);
}

public static synchronized int getOnlineCount() {
return onlineCount;
}

public static synchronized void addOnlineCount() {
WebSocketTest.onlineCount++;
}

public static synchronized void subOnlineCount() {
WebSocketTest.onlineCount--;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web socket 的相关文章

  • 补码计算在计算机上的优点和缺点,相对于原码和反码,补码表示法有什么优点和缺点...

    2016 08 13 回答 原码表示法是机器数的一种简单的表示法 其符号位用0表示正号 用 表示负号 数值一般用二进制形式表示 机器数的反码可由原码得到 如果机器数是正数 则该机器数的反码与原码一样 如果机器数是负数 则该机器数的反码是对它
  • NLP实战

    为了预测电影评分 我们收集了豆瓣电影网站上2 8万名用户对5万多部电影的280万条评论 真实目的 其实是为了让大家能够通过这次的教程 更加了解自然语言处理 所以 使用电影评论来预测电影评分 到底需要分几步 项目简介 本项目只使用电影评论来预
  • 【牛客SQL】SQL24 获取所有非manager员工当前的薪水情况

    题目描述 描述 有一个员工表employees简况如下 有一个 部门员工关系表dept emp简况如下 有一个部门经理表dept manager简况如下 有一个薪水表salaries简况如下 获取所有非manager员工薪水情况 给出dep
  • DVWA暴力破解(安全等级high)

    条件 靶机地址 http 192 168 126 130 vulnerabilities brute 使用工具 burp suite v2 1 05 以爆破admin用户为目标 分析 我们先抓一个登录包看看 我们可以看到同前两个等级 这个传
  • Power BI矩阵格式设置

    Power BI矩阵格式设置13招
  • solidwork软件安装显示失败问题处理

    solidworks正版软件是由美国达索系统公司推出的一款集3D CAD设计软件 分析软件和产品数据管理等功能于一身的系统 由于功能过于丰富和好用 经常被人们用于工业设备零件 钣金与焊接设计 工程制图建模 机械模型设计等行业领域 那么在安装
  • centos7设置密码策略_CentOS7 设置密码复杂度

    在CentOS下设置密码复杂度分为两步 1 修改 etc login defs文件 vim etc login defs PASS MAX DAYS 90 密码最长过期天数 PASS MIN DAYS 80 密码最小过期天数 PASS MI
  • 三维刚体变换

    欢迎访问我的博客首页 三维刚体变换 1 坐标系 1 1 空间坐标系 1 2 右手坐标系与像素坐标系 2 旋转与平移 2 1 推导旋转 2 2 推导平移 2 3 推导变换 2 4 刚体变换 2 5 坐标系旋转与向量旋转 3 链式变换 4 Ei
  • KNOWLEDGE SOLVER: TEACHING LLMS TO SEARCH FOR DOMAIN KNOWLEDGE FROM KNOWLEDGE GRAPHS

    本文是LLM系列文章 针对 KNOWLEDGE SOLVER TEACHING LLMS TO SEARCH FOR DOMAIN KNOWLEDGE FROM KNOWLEDGE GRAPHS 的翻译 知识求解器 教LLMS从知识图谱中搜
  • 启动Tomcat时,出现Port 8080 required by Tomcat v8.0 Server at localhost is already in use.这样的提示解决方法

    在遇到问题的时候 首先我们应该粗略的阅读一下提示大致是什么意思 提示大概意思就是我们Tomcat服务器需要用的8080端口 现在已经正在被使用 所以当我们要启动Tomcat的时候 我们就需要将此端口进行释放 解决方法 第一步 确定端口号 确
  • 2022年3月20日-2022年3月26日(按照方案B,本周17小时,合计1236小时,剩8764小时。)

    因为编辑器上视频教程快学完了 而好多公司会做编辑器就可以了 可以学完后面面了 所以 这周仍然进行方案A 上周进度ue4视频教程mysql 1 1 tf1 2 1 oss 4 2 simpleThread 1 2 editor1 3 3 继续
  • 一次编辑多平台发布的终极解决方案(基于Markdown)

    导读 利用markdown语法 让更多的博客作者能够专注于写作本身 而不会因为各种设置打乱了创作的思绪 本文首先简单介绍markdown的编辑器Typora 接着描述了怎么通过Typora的代码模式将编辑好的文件发布到csdn和微信公众号
  • ajax传回的数据不显示,ajax请求返回的数据显示不出来?求教

    出现问题 PHP代码
  • 分布式事务与锁

    事务基础概念 事物的回顾 事务的定义 是数据库的操作的最小工作单元 是作为单个逻辑工作单元执行的一系列操作 这些操作作为一个整体一起向系统提交 要么都执行 要么都不执行 事务是一组不可在分割的操作集合 事务的ACID原则 事务具有四个基本特
  • 从程序员到项目经理:项目管理三大目标

    项目管理的三大目标即时间 成本和质量 实际是告诉项目经理应重点关注什么因素 项目控制应该做什么工作 三大目标虽然简单 但如果能将其真正贯彻 到自己的行动中 那么对项目计划制定 过程控制等工作 均能起到引导作用 有了努力的方向 项目经理也就可
  • Kali2022安装Nessus——Docker版

    下载镜像并且创建Nessus容器 root kali docker run itd name ramisec nessus p 8834 8834 ramisec nessus 更新nessus插件 root kali docker exe
  • Coding-数组(Array)

    数组 Array 面试中最常见的就是围绕数组进行出题 主要原则数组可以随机读取 一般遇到数组相关的题目 都不是直观看到的那样 第一步暴力解法 第二步是否可以排序 是否可以二分 是否可以使用数据结构 哈希表 队列 栈等 要时刻注意一个数组中有
  • 经典神经网络( AlexNet,VggNet,NiN,GoogLeNet,ResNet)

    卷积神经网络演化史 AlexNet 模型结构 贡献 ReLU激活函数 分布式GPU运算 LRN 局部响应归一化 提高泛化能力 重叠池化 池化窗的步长小于池化层的大小 在池 化时产生重叠 正则化方法 数据集增强 dropout 随机关闭神经元

随机推荐

  • Powershell:如何创建自定义对象,以及如何给自定义对象添加属性和方法

    还记得我刚学会使用PowerShell的时候 那种兴奋和幸福感 终于找到了在Windows下一个强大的Shell 因为他叫Power Shell 可以一边使用着熟悉的Windows桌面系统一边装X的Shell编程了 当我使用它来处理CSV时
  • Qt中的UI文件介绍

    UI文件是什么 u i ui ui通常是指Qt设计师设计出来的界面文件的后缀 它本质上是一个标准XML格式的文本文件 需要通过 u i
  • 前端moment库时间戳转标准时间不准确的问题解决

    做前端项目的时候 根据后台返回的一个时间戳 将时间戳需要转换成标准时间 因为项目中有moment这个时间处理包 而且moment对于时间的转换比较强大 可以根据特定的格式进行转换 最终将时间戳转换成 年 月 日 时 分 秒 这种形式 但是转
  • SpringQueryMap -SpringCloud feign get method 接受自定义对象参数

    feign中和controller中不一样的地方 controller中可以get方法使用对象参数无需任何注解 可默认绑定到对象 示例代码如下 GetMapping value ClueClient LIST OPERATIONS publ
  • J2EE基础集合框架之Set

    前言 上次与大家介绍了集合框架的LIst集合 List集合的特点的是元素有序且可重复 今天与大家分享的是也是一种集合 叫做Set集合 他和List集合是相反的 今天我们就一起去探究Set集合 首先跟思维导图来了解我今天要分享的内容吧 说明
  • 卷积神经网络&目标检测

    卷积神经网络 目标检测 一 Inception网络 1 Inception网络基本思想 2 采用1 1卷积降低计算量 3 Inception模块和Inception网络 二 迁移学习 三 数据扩充方法 四 目标检测 1 特征点检测 2 通过
  • postman的json脚本转jmeter的jmx脚本

    一般研发同学会用postman做接口自测 但是我们做性能测试的时候 又不能用postman 对鉴权不了解的接口 自己调试脚本又很麻烦 这个时候 我们就可以用这个方法把json脚本转换成jmeter用的jmx脚本 环境准备 这几个工具需要提前
  • join python

    Python join 方法用于将序列中的元素以指定的字符连接生成一个新的字符串 1 join是针对字符串进行操作的 2 join里面的参数只能是一个 可以是字典 列表 元组 然后以前面的分隔 形成一个新的字符串 但是里面的东西必须是字符串
  • 百度智能云x蓝色光标共绘AI营销新篇章

    9月12日 百度集团副总裁袁佛玉参加蓝色光标Blue AI行业模型发布会 参与启动仪式并带来了主题演讲 大模型重塑数智世界 此次蓝色光标推出的行业模型 得益于百度智能云千帆大模型平台 以下简称千帆平台 的强大支持 标志着双方合作的深度与广度
  • element中Notification组件(this.$notify)自定义样式

    1 自定义样式效果 2 vue代码 this notifications this notify title dangerouslyUseHTMLString true duration obj remindMethod 3 0 4500
  • 风火编程-- 装饰器,reduce, 片函数,闭包概念

    python核心编程 读书笔记 六 第十一章 11 3 6装饰器 在不改变函数体的前提下 对函数添加前置或后置功能 def 装饰器函数 func def wrapper args kwargs before func func after
  • LeetCode刷题入门

    Letcode刷题入门篇 开始准备刷Letcode的题目 入门基础题 从简单的题目开始做 先考虑用python解题 一 两数之和 使用最简单的暴力解法 复杂度为O n 2 时间复杂度更低的解法 借用List 的相关函数求解 或使用hash求
  • java实现----猜数:随机生成一个数,判断大小,对错。

    需要用到Random 随机生成一个数 if语句 while语句 import java util Scanner 导包 import java util Random 随机生成一个数 public class 猜数 public stati
  • 3.2 创建Maven聚合工程

    3 2 1 构建父工程fmmall 创建一个maven工程 packing设置为 pom 父工程继承继承spring boot starter parent
  • 博世BMI160六轴传感器I2C通信配置

    博世BMI160简介 Bosch Sensortec公司推出的最新BMI160惯性测量单元将最顶尖的16位3轴重力加速度计和超低功耗3轴陀螺仪集成于单一封装 采用14管脚LGA封装 尺寸为2 5 3 0 0 8mm3 当加速度计和陀螺仪在全
  • 发布的qt程序出现libQt5Core.so.5 版本问题

    原因 发布版本跟别的机器qt环境不一样导致 解决方法 把 1 在客户机 去掉 bashrc 关于qt的环境变量 2 同样的方式去掉 etc profile的环境变量 或者吧qt的环境变量修改正确 因为你发布的软件首先回去系统路径中链接相关库
  • 28 openEuler管理网络-配置主机名

    文章目录 28 openEuler管理网络 配置主机名 28 1 简介 28 2 使用hostnamectl配置主机名 28 2 1 查看所有主机名 28 2 2 设定所有主机名 28 2 3 设定特定主机名 28 2 4 清除特定主机名
  • 【得物技术】自动化生成代码几种方案的演变

    今天我们聊一聊自动化生成代码的问题 试想一下 假如有一天机器替代你编写代码 你是应该感到开心还是难过 方案 目前代码生成技术主要有以下几类 1 基于模版编排生成代码 首先说下基于模版生成代码的方式 这种属于最原始最简单也是目前应用最广泛的一
  • egg.js和nest.js的对比

    egg js和nest js的对比 前几天突然看到一个群在说现在用egg的人已经很少了 说用nest的人比较多 然后我就做了一个简单的调查和对比 egg和nest都是比较优秀的框架 但是两个框架有比较大的区别 我主要分为六个方面来分析egg
  • web socket

    package com web import java io IOException import java util concurrent CopyOnWriteArraySet import javax websocket import