消息服务应用1——java项目使用websocket

这篇具有很好参考价值的文章主要介绍了消息服务应用1——java项目使用websocket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在当前微服务项目中,由于业务模块众多,消息服务的使用场景变得异常活跃。而WebSocket由于其自身的可靠性强,实时性好,带宽占用更小的优势,在实时通讯应用场景中独占鳌头,加上HTML5标准的普及流行,在前端和后端开发中应用异常广泛。

一.关于WebSocket

1.WebSocket是什么?

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。简单来说,它就是html5中的一种新的协议,其实质就是对html的长连接的一种升级。

2.与HTTP比较
  • HTTP是短连接,WebSocket是长连接;
  • HTTP通信是单向的,基于请求响应模式,WebSocket支持双向通信;
  • HTTP和WebSocket底层都是TCP连接。
3.WebSocket优点
  • websocket连接只需要建立一次,在第一次连接的时候,客户端和服务器会交换必要的信息。
  • websocket是双向通信的,对比ajax请求还是长轮询,他们都是通过客户端发送请求,服务器响应的形式完成信息的交换,这种模式下服务器处于一种被动的角色。而websocket不存在这个问题,websocket的链接一旦建立,服务器和客户端都可以互推信息。

二. WebSocket使用

文案基于jdk1.8+maven3.8.1+springboot2.7.13而编写

1.引入websocket.jar包
        <!-- websocket模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
2.配置WebSocket
@Configuration
public class MyWebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}
3.WebSocket连接,发送和接收信息
@ServerEndpoint("/websocket/test")
@Component
public class TestWebSocketInfo {

    /**
     * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
     */
    private static int ONLINE_COUNT = 0;

    /**
     * concurrent包的线程安全Set,用来存放每个客户端对应的BigScreenWebSocket对象。
     */
    private static CopyOnWriteArraySet<TestWebSocketInfo> WEB_SOCKET_SET = new CopyOnWriteArraySet<>();
    /**
     * 存储新链接标识。
     */
    public static Map<String, Object> USER_SESSIONS = new HashMap<>(0);
    /**
     * 与某个客户端的连接会话,需要通过它来给客户端发送数据。
     */
    private Session session;


    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session) throws Exception {
        this.session = session;
        // 生成唯一ID
        String uuid = String.valueOf(UUID.randomUUID());
        // 把唯一标识跟客户端绑定
        USER_SESSIONS.put(uuid, this.session);
        // 加入set中
        WEB_SOCKET_SET.add(this);
        synchronized (this) {
            // 使用加锁的方式保证请求串行计数
            TestWebSocketInfo.ONLINE_COUNT++;
        }
        //需要发送到业务数据
        onMessage(JSONObject.toJSONString("Hello,Websocket"));
        System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
    }

    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose() {
        // 从set中删除
        WEB_SOCKET_SET.remove(this);
        boolean removeFlag = WEB_SOCKET_SET.remove(this);
        // 使用加锁的方式保证请求串行计数
        if (removeFlag && BigScreenWebSocketInfo.ONLINE_COUNT > 0) {
            TestWebSocketInfo.ONLINE_COUNT--;
        }
        System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
    }

    /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息
     */
    @OnMessage
    public void onMessage(String message) {
        sendMessage(message);
    }

    /**
     * 发生错误时调用
     *
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error) {
        // 从set中删除
        USER_SESSIONS.remove(session);
        // 从set中删除
        boolean removeFlag = WEB_SOCKET_SET.remove(this);
        USER_SESSIONS.remove(session);
        // 使用加锁的方式保证请求串行计数
        if (removeFlag && BigScreenWebSocketInfo.ONLINE_COUNT > 0) {
            TestWebSocketInfo.ONLINE_COUNT--;
        }
        System.out.println("发生错误");
        error.printStackTrace();
    }


    public void sendMessage(String message) {
        try {
            for (TestWebSocketInfo item : WEB_SOCKET_SET) {
                // 判断链接是否关闭
                if (item.session.isOpen()) {
                    synchronized (item.session) {
                        item.session.getBasicRemote().sendText(message);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static synchronized int getOnlineCount() {
        return ONLINE_COUNT;
    }
}
4.功能测试

当服务端开发完成之后,可以使用https://wstool.js.org/该网址自主连接测试

消息服务应用1——java项目使用websocket,消息服务,springboot,网络协议,websocket,网络协议,网络,java

消息服务应用1——java项目使用websocket,消息服务,springboot,网络协议,websocket,网络协议,网络,java文章来源地址https://www.toymoban.com/news/detail-857427.html

到了这里,关于消息服务应用1——java项目使用websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java连接websocket服务器并发送消息

    一、用python快速启动一个websocker服务器 二、使用java连接并发送消息

    2024年02月11日
    浏览(47)
  • Vue 项目中使用WebSocket 消息推送

    1.这是我在后台管理项目中使用到的,主要的作用是搞一个消息提醒的功能。 2.主要有右上角的提示和有下角的消息弹框。 3.主要实现的功能是如果用户有未读的消息,那么首次登录就弹框,如果用户关闭了页面,那么再次刷新页面的时候,也不再弹框,意思就是一个账户没

    2024年02月11日
    浏览(42)
  • Java 实现使用 Websocket 发送消息

    需求背景:之前做了个楼栋房间数量出租了多少,需要在数据大屏上实时展示 解决方案:以切面拦截出租接口,当有房间出租时重新查询相关数据,封装好用websocket实时传送前端展示 提示:以下是本篇文章正文内容,下面案例可供参考 WebSocket 是一种在单个TCP连接上进行全双

    2024年03月27日
    浏览(43)
  • JAVA 使用WebSocket发送通知消息

    注: 1、jdk必须要1.8及以上 2、项目若有接口拦截过滤,WebSocket接口必须要配置拦截,使其可以验证通过 WebSocket 业务类 发送消息的方法 前端代码

    2024年02月11日
    浏览(52)
  • Java使用websocket实现消息实时通知

    博客仅做学习记录使用。 做项目中遇到这样一个实时通知需求,因为第一次接触这个,期间查了很多资料,看了很多博客,最后实现功能,查询的博客太多,就不一一放出来了,感谢各位大佬。 websocket方式主要代码来源于这个大佬的博客: https://blog.csdn.net/moshowgame/article/d

    2024年02月08日
    浏览(65)
  • Springboot项目使用原生Websocket

    2024年02月11日
    浏览(43)
  • SpringBoot使用-基于Idea搭建WebSocket应用

    SpringBoot是所有基于Spring开发项目的起点,使得开发者能快速搭建 Spring 项目。在Idea集成工具环境下,通过使用SpringBoot,开发人员选用合适的Maven设置,能够方便地搭建WebSocket应用。 不同的Idea版本可能搭建方式略有出入,本文采用的Idea版本为 2018.3.5 (Ultimate Edition), 具体搭建

    2024年02月11日
    浏览(35)
  • java后端使用websocket实现与客户端之间接收及发送消息

    客户端请求websocket接口,连接通道=》我这边业务成功客户端发消息=》客户端自动刷新。 接口:ws://localhost:8080/websocket/xx 经测试,成功 如果是线上服务器连接,则需要在nginx里配置websocket相关内容,再重启nginx,代码如下 本地连接的时候用的是ws://,因为是http链接,但是如果是

    2024年02月16日
    浏览(46)
  • 【微信小程序】使用 WebSocket 进行订阅操作、连接监听、接收到服务器的消息事件

    在微信小程序中使用 WebSocket 进行订阅操作,可以通过 wx.connectSocket 方法创建 WebSocket 连接,并通过相关事件处理函数进行订阅和数据处理。 以下是一个示例代码,演示了在微信小程序中使用 WebSocket 进行订阅: 在上述代码中,我们首先使用 wx.connectSocket 方法创建 WebSocket 连接

    2024年02月16日
    浏览(62)
  • springboot项目使用websocket一直连不上

    最近想给自己手里的springboot项目加上使用websocket的功能,于是查网上的教程发现引入下面的依赖。 引入后加上WebSocketConfig配置类文件就算是完成了,配置类内容如下: 然后写websocket的服务类,网上一大堆这里不啰嗦了。 然而遇到一个问题就是前端建立websocket连接死活连不上

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包