跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

这篇具有很好参考价值的文章主要介绍了跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

全是贴图了:

多说无益!!!

开始:

实现一个某安的连接管理:

其中步骤1到7列的明明白白,而且一开始就提出了要有connectionManager,这已经是很职业的方式了,至少不是学生气:

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

这些肯定不够啊,要给我写代码来看看:

默认是python代码,风格良好。

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

不要用Python,我想用Java

从思路到代码,给安排的明明白白:

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

得寸进尺,要求用websocket !

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

进一步去问,ping/pong的实现机理:

这里直接用了中间的ping/pong ,而websocket这个关键词是从上文中带下来 的,这个回答,即说明了ping/pong的原理,也说清楚了实现方式:

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

这已经很是为难人了。。本拐不死心,继续追,关于稳定性:

问稳定性,已经是中级以上工程师的问题了,回答的处理异常和重连,中规中矩,但对于AI,知足吧!!! 

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

再接着无赖,关于主备地址:

灾备情况,这个事儿其实已经超纲了,即使在工作中,这一层也不应该由应用层的人员来思考。

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

保持连接:

跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然

最终AI的代码如下:文章来源地址https://www.toymoban.com/news/detail-413662.html

public class WebSocketConnectionManager {
    private static WebSocketConnectionManager instance;
    private static String primaryAddress;
    private static String secondaryAddress;
    private static WebSocketClient client;
    private static WebSocketContainer container;
    private static Session session;
    
    public static WebSocketConnectionManager getInstance() {
        if (instance == null) {
            instance = new WebSocketConnectionManager();
        }
        return instance;
    }
    
    public void init(String primaryAddress, String secondaryAddress) {
        this.primaryAddress = primaryAddress;
        this.secondaryAddress = secondaryAddress;
        this.client = new WebSocketClient();
        this.container = ContainerProvider.getWebSocketContainer();
    }
    
    public boolean checkConnection() {
        return session != null && session.isOpen();
    }
    
    public void createConnection(String address) {
        try {
            URI uri = URI.create(address);
            client.start();
            session = container.connectToServer(this, uri);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public void changeAddress(String primaryAddress, String secondaryAddress) {
        if (session == null || !session.isOpen()) {
            createConnection(primaryAddress);
        } else if (session.getRequestURI().getHost().equals(primaryAddress)) {
            createConnection(secondaryAddress);
        } else {
            createConnection(primaryAddress);
        }
    }
    
    public void startHeartbeat(long interval, long timeout) {
        session.setMaxIdleTimeout(timeout);
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
        executor.scheduleAtFixedRate(() -> {
            if (session.isOpen()) {
                session.getAsyncRemote().sendPing(null);
            }
        }, interval, interval, TimeUnit.MILLISECONDS);
    }
    
    @OnPong
    public void onPong(PongMessage message) {
        // 处理pong消息
    }
    
    public void reconnect(int retries, long interval, Runnable callback) {
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
        executor.scheduleAtFixedRate(() -> {
            if (checkConnection()) {
                executor.shutdown();
                callback.run();
            }
            createConnection(primaryAddress);
            retries--;
            if (retries == 0) {
                executor.shutdown();
                callback.run();
            }
        }, 0, interval, TimeUnit.MILLISECONDS);
    }
    
    public void keepConnection(String primaryAddress, String secondaryAddress) {
        reconnect(3, 1000, () -> {
            if (checkConnection()) {
                return;
            }
            changeAddress(primaryAddress, secondaryAddress);
        });

到了这里,关于跟着ChatGPT手把实现一个websocket连接管理器! 毛骨悚然的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 从零开始,手把手教你实现基于 Websocket 的微服务

    Websocket 协议是为了解决 HTTP 协议缺陷而产生的一种通信协议,它能够在客户端和服务器之间建立持久性的连接,并且允许双向通信。 HTTP 协议的请求与响应模式,其实并不适合实时通信的场景。比如聊天室、在线游戏等应用,都需要实时地推送消息到客户端,而 HTTP 协议则需

    2024年02月11日
    浏览(52)
  • gateway管理websocket长连接服务,消息推送

    目前业务需要长连接进行实时数据交互,同时已有的业务系统统一经过gateway网关调度,websocket服务是有状态服务,所以希望集成到同一个注册中心让gateway进行长连接的负载均衡转发和管理,以此写个demo进行测试 提供http请求api和长连接进行消息发送  首先连接需要登录后获

    2023年04月13日
    浏览(42)
  • WebSocket 报java.io.IOException: 远程主机强迫关闭了一个现有的连接。

    在客户端强制关闭时,或者窗口强制关闭时,后端session没有关闭。 有时还会报:java.io.EOFException: 这个异常 前端心跳没有收到信息,还在心跳。 所以在  @OnClose ,@OnError 在这两个方法中,不管是关闭还是发生未知错误,都关闭session

    2024年02月09日
    浏览(69)
  • 全民AI时代:手把手教你用Ollama & AnythingLLM搭建AI知识库,无需编程,跟着做就行!

    在本地电脑上跑大语言模型(LLM),已经不是什么高科技操作了。随着技术的迭代,现在利用Ollam和AnythingLLM就可以轻松构建自己的本地知识库, 人人皆可上手,有手就行 。过往要达成这一目标,可是需要有编程经验的。 首先得了解一下背后的原理。大概就是三步走:一是

    2024年04月24日
    浏览(108)
  • 手把手教你做一个 ChatGPT !丝滑小白版,只需一张单卡 GPU,轻松开启个性化训练!...

    大家好,我是贺同学。 一直以来密切关注 ChatGPT 的趋势,最近相关的话题可谓是热度不减,虽然从事互联网行业,但一直对 LLM 相关领域关注较少。 最近的 ChatGPT 的火热,让我对 LLM 相关开源社区也关注了起来,相关的开源社区,也涌现了很多优秀的工作,吸引了很多人的关

    2024年02月08日
    浏览(57)
  • vue系列(三)——手把手教你搭建一个vue3管理后台基础模板

    目录 一、前言: 二、网站页面分析 三、开发步骤 (一)、安装element (二)、安装使用svg插件 (三)、编写主界面框架代码  (四)、编写菜单栏  (五)、新建页面及路由 (六)、定制页面标签栏 第一步: 第二步: (七)、修改封装菜单栏 (八)、添加面包屑 四、结

    2023年04月24日
    浏览(61)
  • 手把手实现一个lombok

    什么是JSR ? JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。 有超过300的JSR。一些更为明显的JSRs包括: 的JSR# 规格或技术 1 实时规范为Jav

    2023年04月23日
    浏览(43)
  • 【vue3】前端应用中使用WebSocket与服务器进行通信并管理连接状态。

    1、写一个hook函数 url 是WebSocket的服务器地址,其中 Math.random() 用于生成一个随机数,以避免缓存问题。 onConnected 、 onDisconnected 和 onError 是连接建立、断开和出错时的回调函数,你可以根据实际需求来定义它们。 onMessageDefault 是当接收到消息时的默认处理函数,在这里将接收

    2024年02月09日
    浏览(62)
  • 全网最详细中英文ChatGPT接口文档(五)30分钟快速入门ChatGPT——手把手示例教程:如何建立一个人工智能回答关于您的网站问题,小白也可学

    This tutorial walks through a simple example of crawling a website (in this example, the OpenAI website), turning the crawled pages into embeddings using the Embeddings API, and then creating a basic search functionality that allows a user to ask questions about the embedded information. This is intended to be a starting point for more sophisticated applicat

    2023年04月17日
    浏览(57)
  • WebSocket 实现长连接及通过WebSocket获取客户端IP

    WebSocket 是一种支持双向通讯的网络通信协议。 实现过程: 1 添加ServerEndpointExporter配置bean 2 实现过程 需求是通过WebSocket,建立长连接,并获取当前在线的人数。通过Websocket 不断发送消息,建立长连接,给Session续命。我是通过MAC地址,区分不同的设备,因为我的需求中需要一

    2024年02月09日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包