`
towardsfuture
  • 浏览: 5271 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

web socket

阅读更多
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--;
    }
}
分享到:
评论

相关推荐

    通过前端Jquery调用web Socket连接,并返回数据Demo

    标题"通过前端Jquery调用Web Socket连接,并返回数据Demo"主要涉及以下知识点: 1. **JQuery**:JQuery是一个广泛使用的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互。在本示例中,JQuery可能被...

    wsdemo, 一个牛仔 web socket演示.zip

    wsdemo, 一个牛仔 web socket演示 wsdemo你最喜欢的平台会在上面出现? 你如何包括参赛者?只需创建套接字服务器"你好,世界",一个可以读出 web socket版本 13 ( 13是我的客户端支持的唯一版本)的echo服务器。首先...

    clj-wamp, web socket应用消息传递协议( 宋体) 用于Clojure和HTTP工具包.zip

    clj-wamp, web socket应用消息传递协议( 宋体) 用于Clojure和HTTP工具包 clj-wampweb socket应用程序消息传递协议( v1 )的...提供常见的web socket消息传递模式和错误处理( RPC,PubSub和身份验证)的钩子。 访问 cljwam

    C#实现WEB Socket源码大全2022年

    标题 "C#实现WEB Socket源码大全2022年" 暗示了这个压缩包包含了一系列关于使用C#编程语言实现Web Socket技术的源代码。Web Socket是一种在客户端和服务器之间建立长连接的协议,它允许双方进行双向通信,从而在实时...

    jmeter--web socket引用插件包

    **JMeter——Web Socket引用插件包** 在性能测试领域,Apache JMeter是一款广泛应用的开源工具,主要用于模拟大量用户并发访问服务器,以测试其性能和稳定性。在针对Web Socket协议进行压力测试时,JMeter提供了...

    c# 通过web socket服务,调用读卡器,条码打印机

    在IT行业中,Web Socket是一种在客户端和服务器之间建立持久连接的协议,允许双方实时、双向地交换数据。在本项目中,"c# 通过Web Socket服务,调用读卡器,条码打印机",我们将深入探讨如何利用C#语言和Web Socket...

    Test_final.zip_Final Test_java web_vertical577_web socket_websoc

    标题中的"Test_final.zip_Final Test_java web_vertical577_web socket_websoc"表明这是一个关于Java Web项目的最终测试,特别关注了垂直577(可能是项目编号或特定需求)以及Web Socket技术,用于实现实时通信。Web...

    Tomcat7、Chrome下web socket的一个例子

    标题中的“Tomcat7、Chrome下web socket的一个例子”揭示了我们要探讨的核心技术点,即在Tomcat 7服务器上使用Web Socket与Google Chrome浏览器进行实时双向通信的应用示例。Web Socket是HTML5引入的一种新的通信...

    12.Web_Socket_STM32+W5500_

    标题 "12.Web_Socket_STM32+W5500_" 暗示了这是一个关于使用STM32微控制器和W5500网络接口芯片实现Web Socket通信的项目。STM32是一款广泛使用的基于ARM Cortex-M内核的微控制器,而W5500则是一个集成SPI接口的...

    web_socket java版实时聊天室

    - `Web Socket Server`:这是一个可能的Java WebSocket服务器实现,包含处理WebSocket连接、解析和响应消息的逻辑。 综合上述信息,我们可以理解这是一个使用HTML5 WebSocket和Java技术构建的实时聊天室示例,包含...

    Html5 web Socket案例(非常经典)

    HTML5 Web Socket是一种在客户端和服务器之间建立长连接的协议,它允许实时、双向的数据传输。这个技术在现代Web开发中扮演着重要角色,尤其是在构建实时应用,如在线聊天、实时股票报价、多人在线游戏或者实时协作...

    netty-websocket, 在联网的web socket服务器上构建了一个完全功能化的web socket服务器.zip

    netty-websocket, 在联网的web socket服务器上构建了一个完全功能化的web socket服务器 联网 web socket启动首先,你的服务器应该支持 java 8.在IDE中运行 net.mengkang.WebSocketServer,然后你可以在浏览器中打开 ...

    HTML5 Web Socket/Adobe Flash Web Socket支持测试

    但是已经有不少公司提供的浏览器支持HTML5的标准,以下是我通过代码测试(代码提供:Tootallnate)多个流行的浏览器对HTML5的WebSocket的支持情况,同时一同测试了Adobe Flash Web Socket的支持结果。 测试结果表格...

    BBS.rar_bbs jsp_jsp web socket_websocket.jar jsp_意见系统

    【标题】"BBS.rar_bbs jsp_jsp web socket_websocket.jar jsp_意见系统" 描述了一个基于JSP技术构建的Web应用程序,该程序主要用于实现一个BBS(电子公告板)系统,目的是促进用户之间的信息交流和意见分享。...

    ClankBundle, 一个Symfony2包,用于 Ratchet web socket服务器.zip

    ClankBundle, 一个Symfony2包,用于 Ratchet web socket服务器 ClankBundleClank是一个Symfony2包,旨在在一个易于使用的应用程序架构中集成 web socket功能。socket.io 一样,它提供了服务器端和客户端代码,确保你...

    ESP8266-Websocket, 用于 ESP 8266的web socket库.zip

    ESP8266-Websocket, 用于 ESP 8266的web socket库 web socket客户端和ESP-8266服务器这是一个实现 web socket客户端和运行在ESP-8266上的服务器的简单库。正在启动应该从你可以访问的任何web服务器中提供示例 ...

    websocket, web socket实现.zip

    websocket, web socket实现 大猩猩 web socketGorilla是一个 ,它是 web socket协议的一个实现。 文档API参考聊天示例:命令示例客户端和服务器示例文件监视示例状态Gorilla包提供了一个完整的和测试的 web

    robust-websocket, 用于浏览器的强大的重新连接 web socket客户端.zip

    robust-websocket, 用于浏览器的强大的重新连接 web socket客户端 强大的web socket 强大的。重新连接浏览器的web socket客户机 robust-websocket 是在实现相同接口的标准 web socket web socket类的包装器,但当...

    dwebsocket, 用于 Django的web socket协议.zip

    dwebsocket, 用于 Django的web socket协议 dwebsocket收费的dwebsocket MODULE 为 Django 提供了 web socket协议的一个实现。这个 MODULE 实现了 web socket协议的最终版本,如在 RFC 6455中定义的那样。 某些浏览

Global site tag (gtag.js) - Google Analytics