1 package me.gacl.websocket;

2

3 import java.io.IOException;

4 import java.util.concurrent.CopyOnWriteArraySet;

5

6 import javax.websocket.*;

7 import javax.websocket.server.ServerEndpoint;

8

9 /**

10  * @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端,

11  * 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端

12  */

13 @ServerEndpoint("/websocket")

14 public class WebSocketTest {

15     //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

16     private static int onlineCount = 0;

17

18     //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

19     private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();

20

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

22     private Session session;

23

24     /**

25      * 连接建立成功调用的方法

26      * @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据

27      */

28     @OnOpen

29     public void onOpen(Session session){

30         this.session = session;

31         webSocketSet.add(this);     //加入set中

32         addOnlineCount();           //在线数加1

33         System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());

34     }

35

36     /**

37      * 连接关闭调用的方法

38      */

39     @OnClose

40     public void onClose(){

41         webSocketSet.remove(this);  //从set中删除

42         subOnlineCount();           //在线数减1

43         System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());

44     }

45

46     /**

47      * 收到客户端消息后调用的方法

48      * @param message 客户端发送过来的消息

49      * @param session 可选的参数

50      */

51     @OnMessage

52     public void onMessage(String message, Session session) {

53         System.out.println("来自客户端的消息:" + message);

54         //群发消息

55         for(WebSocketTest item: webSocketSet){

56             try {

57                 item.sendMessage(message);

58             } catch (IOException e) {

59                 e.printStackTrace();

60                 continue;

61             }

62         }

63     }

64

65     /**

66      * 发生错误时调用

67      * @param session

68      * @param error

69      */

70     @OnError

71     public void onError(Session session, Throwable error){

72         System.out.println("发生错误");

73         error.printStackTrace();

74     }

75

76     /**

77      * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。

78      * @param message

79      * @throws IOException

80      */

81     public void sendMessage(String message) throws IOException{

82         this.session.getBasicRemote().sendText(message);

83         //this.session.getAsyncRemote().sendText(message);

84     }

85

86     public static synchronized int getOnlineCount() {

87         return onlineCount;

88     }

89

90     public static synchronized void addOnlineCount() {

91         WebSocketTest.onlineCount++;

92     }

93

94     public static synchronized void subOnlineCount() {

95         WebSocketTest.onlineCount--;

96     }

97 }

websocket java 测试_Java后端WebSocket的Tomcat实现相关推荐

  1. websocket java 例子_java 实现websocket的两种方式实例详解

    目录 一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring ...

  2. tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10

    一.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成 ...

  3. tomcat启动java项目_Java web项目启动Tomcat报错解决方案

    点击运行项目时显示 A Java Exception has occurred. 'Starting Tomcat v9.0 Server at localhost' has oncountered ...

  4. selenium java测试_java+selenium 自动化测试

    在项目上使用自动化测试,是为了跑主流程的回归测试,提高测试效率,在每个测试版本中把主要的精力放在发版内容新增的需求中: 根据项目的功能模块,把业务主流程和使用频率高的功能抽取出来进行自动化测试,作为发 ...

  5. 小米Java笔试_JAVA后端笔试试题(一)

    2017年6月7日,天气晴转阴.心情还不错. 上周六参加了自己的第一场笔试,感觉很糟糕,主要是对基础知识掌握不扎实,现在把笔试中的部分问题总结归纳如下,便于以后查看. 1.GC是什么?为什么要GC? ...

  6. Java后端WebSocket的Tomcat实现

    转自: http://blog.chenzuhuang.com/archive/28.html http://www.cnblogs.com/xdp-gacl/p/5193279.html 一.Web ...

  7. Java后端WebSocket的Tomcat实现(转载)

    一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...

  8. java web 发送消息_java集成WebSocket向指定用户发送消息

    一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...

  9. Java后端WebSocket的实现

    WebSocket 1.什么是WebSocket? webSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议. webSocket使得客户端和服务器之间的数据交换变得更加简单 ...

最新文章

  1. C++ cin相关函数总结
  2. python买什么书好-Python入门经典书籍有哪些?有这三本就够了
  3. Centos7_ELK5.4.1配置部署
  4. 团队竞争力有多强,你的企业就能走多远
  5. 【计算机网络】网络基础
  6. 利用matlab点云工具处理点云
  7. bootstrap table导出功能无效报错Uncaught INVALID_CHARACTER_ERR: DOM Exception 5和导出中文乱码问题...
  8. unity动画实现物体颜色闪烁
  9. Python之仓库管理系统
  10. js 实现继承的几种方式
  11. 大数据即将突破万亿,数据科技如何落地成产品?
  12. 累计薅走数百万,EOS Dapps已成黑客提款机?
  13. 这个能力很重要,但大多数人没有
  14. 错题本——Python
  15. 微信公众号流量主的实际收益(本人亲测)
  16. 全面解读信创行业 关注国产操作系统
  17. 谁说chatGPT要取代数据分析师?
  18. 电脑开机后右下角出现一个金色小锁,显示无法连接到windows用户,该怎么办?
  19. 一个能够快速把JSON数据格式化成漂亮网页的开源JavaScript库:angular-json-human
  20. Verilog IIC AT24C128和LM75

热门文章

  1. Lua中使用Sleep函数
  2. Android 游戏开发必备的基础知识
  3. 从本地上传到hdfs上出现异常
  4. ios系统web(微信公众号)开发遇到的问题及解决方案
  5. JQ无法修改input的type属性的替代解决方法
  6. pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法
  7. linux -bash: ipconfig: command not found 解决方法
  8. C ++中线程的简单示例
  9. Gson:如何从没有注释的序列化中排除特定字段
  10. 应用程序服务器和Web服务器之间有什么区别?