75行Java Redis实时聊天室 还带界面!

钉钉Java面经及参考答案 TCP 三次握手建立连接的核心目标是双向确认双方发送、接收能力,同步通信序列号,协商初始窗口大小,防止历史过期连接报文干扰新连接。第一次握手,客户端主动向服务端发送 SYN 报文,携带客户端随机生成的初始序列号 ISN,客户端状态变更为 SYN_SENT,目的是告知服务端客户端具备发送数据的能力。第二次握手,服务端收到 SYN 报文后,回复 SYN+ACK 报文,其中 ACK 确认号为客户端 ISN+1,同时携带服务端自身随机初始序列号,服务端进入 SYN_RCVD 状态,代表服务端确认收到客户端报文,且自 阅读详情

直接上图!
在这里插入图片描述
用的是Redis的订阅功能
上代码!

package com.qukin.chatroom;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main extends JedisPubSub {
    private static final String channel="chatroom";     // redis中的list数据结构名称和redis订阅名称
    private static final JTextArea area = new JTextArea();
    private static final JTextField text = new JTextField();
    private static final JButton send=new JButton("发送");
    private static final JScrollPane pane=new JScrollPane();
    private static final JLabel label=new JLabel("姓名:");
    private static final JTextField name=new JTextField();
    private static boolean TF=false;
    static List<String> list = new ArrayList<>();
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public Main() {
        send.addActionListener(e -> {
            if (text.getText().trim().equals("") || name.getText().trim().equals("")){
                JOptionPane.showMessageDialog(null,"姓名或输入框禁止为空");
            }else{
                TF=true;
                Jedis jedis = new Jedis("localhost");
                jedis.publish(channel, text.getText());
                jedis.lpush(channel, "Time:" + df.format(new Date()) + ", Name:"+name.getText()+" , Message:" + text.getText());
                text.setText("");
            }
        });
    }
    @Override
    public void onMessage(String channel, String message) {
        if (TF) {
            list.add("\t" + df.format(new Date()) + "\n" + name.getText() + ": " + message);
            TF=false;
        }else
            list.add("\t" + df.format(new Date()) + "\n" + "匿名用户: " + message);
        area.setText("");
        for (String s : list)
            area.append(s + "\n");
    }
    public static void main(String[] args) {
        JFrame frame=new JFrame("匿名聊天室");
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,300);
        frame.setResizable(false);
        frame.setVisible(true);
        label.setBounds(10,220,40,30);
        frame.add(label);
        name.setText("QuKin");
        name.setBounds(50,220,80,30);
        frame.add(name);
        send.setBounds(290,220,80,30);
        frame.add(send);
        text.setBounds(140, 220, 140, 30);
        frame.add(text);
        pane.setBounds(10, 10, 360, 200);
        area.setEditable(false);
        pane.setViewportView(area);
        frame.add(pane);
        Font f=area.getFont();
        area.setFont(new Font(f.getFamily(),f.getStyle(),f.getSize()+2));
        DefaultCaret caret = (DefaultCaret)area.getCaret();
        caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
        Jedis jedis = new Jedis("localhost");
        Main main=new Main();
        jedis.subscribe(main, channel);
    }
}

应该够简介明了吧
如果大哥有币,请打赏吧!如果没有点个赞收个藏分个享也行啊

【信息科学与工程学】计算机科学与自动化——第八十一篇 Java分布式软件高并发/高可用算法01 4. 消息队列(如Kafka的Topic分区,本质是范围)。3. 若是ACCEPT事件,bossGroup线程接受连接,创建SocketChannel,并将其注册到workerGroup的一个EventLoop的Selector上,关注READ事件。1. 分布式缓存分片(如Redis Cluster)。4. 分布式文件存储(如Ceph CRUSH)。6. 调用栈的模拟(如协程)。3. 服务网格(如Istio)的基础。2. 本地缓存与集中式缓存(如Redis)的一致性维护。3. 静态数据(如配置)缓存。 阅读详情

相关推荐

spring集成redis实现聊天室功能

spring集成redis,实现订阅、发布消息聊天室网页群聊功能。

java基于Redis及WebSocket实现聊天室(一)

基于Redis及WebSocket的聊天室 在线测试地址: http://123.206.50.156:8763/hi?name=XXXXX

CJD的博客 5472

使用Redis的pubsub技术构建实时消息系统

使用Redis的pubsub技术构建实时消息系统

java聊天功能(集群)redis订阅发布实现

java聊天(集群)

翎墨袅 1256

Power BI----各类切片器的使用

首先介绍切片器的最基础的创建和效果演示,紧跟着介绍切片器在多页中的同步和本身与报表的联动,再然后介绍关于切片器属性的设置,使得交互更加美观,最后介绍几种很好看的第三方的切片器样式和自己构建的可折叠的切片器.........

Itsme_MrJJ的博客 2万+

Palabos User Guide中文解读 | 第五章 | Palabos编程 (跳过了第四章Palabos-Java接口)

作者的话:本人在学习palabos时,发现国内中文资料甚少,恰好网上可以直接搜到palabos user guide这种英文资料,加之时间充裕,便打算开始翻译,翻了一节后发现这可能算侵权,就比较伤脑筋,突然想到自己写中文解读即可,便有了下面的博客。 Palabos User Guide Release 1.0 r1 Copyright © 2019 University of Geneva Jul...

Yulan Fang's notes. 2298

Redis实现聊天功能

原文转载自 1.Redis实现一对一的聊天功能(基于lpush和brpop实现) 简单的实现一个用户向另一个用户发送多条信息,实现的思路是: 一对一聊天的思路:(采用Lpush和Brpop实现) 1.消息生产者生产消息到redis中:生产消息的时候根据接收人的userName与消息的类型发送到对应的key,采用lpush发送消息(根据userName生成key) 2.消息的消费者根据userNam...

yang——x的博客 1024

VsCode安装和配置c/c++环境(超完整,小白专用)

1. vsCode配置C/C++环境 1. vsCode下载和安装 1. 下载Microsoft vsCode [vsCode在这里插入图片描述官网下载: https://code.visualstudio.com/ 2. 安装vsCode 3. 下载中文插件 我这边已经下载过,刚卸载但是没有重启编译器,所以界面显示了中文 2. MinGW编译器下载和配置 1. 下载MinGW 在线安装——下载MinGW-W64-install.exe(速度慢) 下载压缩包——×86_64-posix-

黄化的多多 60万+

基于websocket+Redis的实时聊天系统

本项目是基于websocket的实时聊天系统,由于在项目开发中需要使用到在线聊天功能,所以学了websocket来实现了这个功能。能够实时推送聊天记录,使用Redis保存聊天记录和聊天列表。用户上线后可以查看与别人的聊天记录和最近的聊天用户。在网上搜索了很久,都没有看到合适的项目,所以自己写了一套。

weixin_44802566的博客 1944

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 500

倍福PLC--PERSISTENT断电保持数据和BOOT中各文件对应的解析

将D:\TC3程序\TwinCAT Project146\TwinCAT RT(x86)\Plc 文件夹的中三个替换文件复制到:G:\TwinCAT\3.1\Boot\Plc完成替换,如下图。(2) 找到程序所存的路径,编程电脑的D:\TC3程序\TwinCAT Project146路径下,并选择对应系统平台TwinCAT RT(x86)(3) 控制器断电,拔出内存卡,使用读卡器,在编程电脑中打开:(本次测试读卡器为G盘)(5) 开机完成后,TwinCAT自动运行,当前闪灯频率为50ms。

weixin_41883890的博客 2344

JavaWeb聊天(Redis+环信) 一、发送接收消息、聊天记录拉取

公司有需求做一个聊天功能。 APP端,跟网页端互相聊天android端直接嵌入了环信提供的DEMO。聊天记录。都是存储在本地自己进行维护。所以本次只需要维护网页端的聊天记录~还有接收发送的消息就好啦。好啦~人狠话不多。看效果吧!总结一下要实现的功能点1、发送与接收文字、表情、图片、地址消息、自定义消息  --》拉取聊天记录 (三天内的)2、消息来了。外层菜单的红点提示,未读消息3、redis中的聊...

q826qq1878的博客 1万+

使用 MATLAB/Simulink 构建一个 光伏-储能联合系统接入10kV配电网 的协同控制仿真模型

本教程详细介绍了基于Simulink的光伏-储能联合系统在配电网中的协同控制仿真方法。主要内容包括:系统结构设计(光伏阵列、储能电池、双向变流器等);建模流程(MPPT控制、BMS系统、PCS矢量控制);核心协同控制策略(功率平滑、削峰填谷、电压支撑的三层控制架构);仿真结果分析方法及性能评估指标。教程提供了从组件建模到系统集成的完整指导,并建议了模型预测控制、微网孤岛运行等进阶方向,帮助开发者掌握智能电网的关键仿真技术。通过该模型可实现可再生能源的高效利用与电网稳定运行的平衡。

amy_mhd的博客 217

hjr-JAVA Redis使用详解

使用 redis是KV型的内存数据库,在java中使用Redis,需要在Pom中引用Jedis包,之后新建Config类进行基本配置,在使用处例化Jedis,之后对Redis进行各种操作 常用数据结构 String 、Set 、Sort Set、Hash、List、Set 持久化机制 RDB(默认):指定的时间间隔内将内存中的数据集快照写入磁盘,会生成dump.rdb文件,重启后加载改文件 ...

hjr的博客 315

深度拆解 ‘High-Frequency Trading’ (HFT) 系统:解析如何在 100 纳秒内完成从网卡到 C++ 策略的响应

在100纳秒内完成从网卡到C++策略的响应,这是一项对技术栈每一个层面都进行极限优化的系统工程。它要求我们深入理解计算机体系结构、操作系统、网络协议和C++语言的底层机制。从物理距离的极致缩短,到高性能网卡和内核旁路技术,再到C++代码中每一个字节、每一个CPU周期的精打细算,HFT系统展现了人类对计算速度的永恒追求。这项技术不仅仅应用于金融交易,其背后的低延迟理念和实现方法,如DPDK、无锁编程、硬件加速等,正在逐渐渗透到其他对延迟敏感的领域,例如电信网络、边缘计算和工业自动化。

weixin_41455464的博客 1039

栅格数据做相关性分析前的预处理(批量定义投影、栅格投影、重采样)

最近在做两个栅格数据的相关性分析,这个最主要的是两个栅格数的行列号是一致的(也就是说坐标系、分辨率一致),那么标准的栅格数据的分辨率是以米的形式存在的,但是有一些栅格数据是以度为单位存在的,所以在做分析前,一定要先把其转换为米,否则在重采样的时候就会出错。(相关文章——栅格数据以度为单位变为以米为单位的简单做法)当然,在变其分辨率的单位前,一定要将其坐标系转换为一致。所以就有以下的步骤(如何将两个栅格数据的坐标系、分辨率的单位和分辨率一致) 1.首先,要看两个栅格数据的坐标系是否一致,如果不一致,要先统一到

qq_41828818的博客 8350

python项目开发案例集锦pdf,python项目开发案例100行

Python 初学者在迈过安装编程环境和基本语法的门槛 ,准备大展身手的时候,可能突然就会进入迷茫期:不知道做些什么、再学些什么。所以找到自己感兴趣、能够跟着动手和学习的 Python 项目是特别重要的,这样才能把学会的 Python 知识用起来,不断地提高。最终从新手晋升为高手!随着 Python 语言的流行,越来越多的人加入到了 Python 的大家庭中。这里整理了100个Python实战项目列表,都有完整且详细的教程,你可以从中选择自己想做的项目进行参考学习练手,你也可以从中寻找灵感去做自己的项目。

weixin_61088415的博客 939

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

从零到Offer:一个Java应届生的真实逆袭日记

最绝望的一次,我去面试一家创业公司,技术面时面试官让我手写一个LRU缓存。我大脑一片空白,最后只憋出一句:"我……"走出公司大楼时,天突然下起暴雨,我没带伞,浑身湿透地站在地铁口,第一次怀疑自己是不是根本不适合编程。宿舍的兄弟们都拿到了Offer:有人去了大厂,有人进了国企,而我——投了200份简历,面试了30家公司,却只收到3个"等通知"三个月后,我终于能流畅地回答:"HashMap的负载因子为什么是0.75?上个月,我拿到了某二线厂20k的Offer。HR问我职业规划时,我平静地说:。

x1ao_fe1的博客 470

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JAVA学习教程【失效不补】

第一部分:链接:https://pan.baidu.com/s/1Wsvvk1miNbbd7ryahiTbjg 密码:1rw6第一部分包含:01.java基础(共300集左右).02.HTML(共21集).03.CSS(共21集).04.JavaScript(共17集).05.JQuery(共18集).06.Bootstrap(共17集).07.MYSQL(共38集).08.JDBC(共30集)...

蜗牛的博客 394

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

2019最新《java基础到架构教程》

20180605java就业视频 01.java基础(共300集左右) 02.HTML(共21集) 03.CSS(共21集) 04.JavaScript(共17集) 05.JQuery(共18集) 06.Bootstrap(共17集) 07.MYSQL(共38集) 08.JDBC(共30集) 09.XML&tomcat(共28集) 10.HTTP&Servlet(共24集) 11....

weixin_44995891的博客 209

精选100个Python实战项目案例,送给缺乏实战经验的你

所以找到自己感兴趣、能够跟着动手和学习的 Python 项目是特别重要的,这样才能把学会的 Python 知识用起来,不断地提高。最终从新手晋升为高手!随着 Python 语言的流行,越来越多的人加入到了 Python 的大家庭中。这里整理了100个Python实战项目列表,都有完整且详细的教程,你可以从中选择自己想做的项目进行参考学习练手,你也可以从中寻找灵感去做自己的项目。32、【Python气象数据分析--《Python 数据分析实战》】11、【基于scrapy爬虫的天气数据采集(python)】

m0_70615468的博客 2万+

100个精选Python实战项目案例,送给缺乏练手经验的你

随着 Python 语言的流行,越来越多的人加入到了 Python 的大家庭中。

v_python1018的博客 1945

python案例讲解视频,python简单小案例

随着 Python 语言的流行,越来越多的人加入到了 Python 的大家庭中。为什么这么多人学 Python?我要喊出那句话了:“人生苦短,我用 Python!”,正是因为语法简单、容易学习,所以 Python 深受大家喜爱python流星雨特效代码简单。(Python!Python!Python!Python 初学者在迈过安装编程环境和基本语法的门槛 ,准备大展身手的时候,可能突然就会进入迷茫期:不知道做些什么、再学些什么。

2301_81900494的博客 936

python数据处理与分析案例,python如何进行数据处理

随着 Python 语言的流行,越来越多的人加入到了 Python 的大家庭中。为什么这么多人学 Python?我要喊出那句话了:“人生苦短,我用 Python!”,正是因为语法简单、容易学习,所以 Python 深受大家喜爱python画四瓣花图形。(Python!Python!Python!Python 初学者在迈过安装编程环境和基本语法的门槛 ,准备大展身手的时候,可能突然就会进入迷茫期:不知道做些什么、再学些什么。然后对编程的兴趣就会慢慢消退,找不到坚持下去的理由,从而慢慢淡忘之前学会的编程知识。

降AIGC工具 866
上一篇: 前端制作PUBG瞄准镜!
下一篇: 简易版羊了个羊JS
QuKie
博客等级 码龄7年 128粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值