<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bossfriday - 个人博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/camelials</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; camelials]]></copyright><item><title><![CDATA[【手撸IM】SycllaDB 消息存储基础]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/161594130</link><guid>https://blog.youkuaiyun.com/camelials/article/details/161594130</guid><author>camelials</author><pubDate>Mon, 01 Jun 2026 16:15:41 +0800</pubDate><description><![CDATA[ScyllaDB凭借其Shard-per-Core架构、无GC停顿和高效LSM树实现，成为IM消息存储的理想选择。其核心优势包括：线性扩展能力、毫秒级延迟、高吞吐写入和海量数据支持。消息存储设计采用TimeWindowCompactionStrategy(TWCS)优化时序数据，分区键设计遵循"app_id+user_id+时间桶"模式确保查询效率。离线消息表采用7天TTL，历史消息表180天TTL，通过分区键和聚簇键的合理设计支持消息漫游功能。]]></description><category></category></item><item><title><![CDATA[WhatsApp抓包分析]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/161285254</link><guid>https://blog.youkuaiyun.com/camelials/article/details/161285254</guid><author>camelials</author><pubDate>Fri, 22 May 2026 14:43:13 +0800</pubDate><description><![CDATA[WhatsApp 是当前主流的端到端加密（E2EE）即时通信系统，其通信协议基于 TLS、QUIC 以及未公开私有协议实现。由于应用层 Payload 与实时信令均经过加密保护，因此无法像传统明文协议一样直接解析消息内容、信令字段及协议结构。本文并不尝试对 WhatsApp 私有协议进行逆向，而是采用网络行为分析的方法，通过 Wireshark 抓包、差分操作等方式，对 WhatsApp的抓包进行分析与推断。]]></description><category></category></item><item><title><![CDATA[【手撸IM】高性能HTTP API服务设计与实现]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/152259868</link><guid>https://blog.youkuaiyun.com/camelials/article/details/152259868</guid><author>camelials</author><pubDate>Tue, 30 Sep 2025 13:42:33 +0800</pubDate><description><![CDATA[本文介绍了一种基于Netty与ActorRPC的高性能HTTP API服务架构方案。相比传统Spring Boot方案，该方案通过Netty的事件驱动模型和ActorRPC的异步特性，实现了更短的调用链和更低的内存开销，适用于IM、游戏、实时风控等高性能场景。文章详细对比了两种方案的优劣势，并提供了核心代码实现，包括HttpApiServerHandler和ApiRequestType枚举类，展示了如何处理HTTP请求和路由匹配。虽然该方案开发复杂度较高，但在高并发、低延迟场景下能显著提升性能表现。]]></description><category></category></item><item><title><![CDATA[【手撸IM】非 Springboot 项目实现自定义注解 Bean 注入]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/146099181</link><guid>https://blog.youkuaiyun.com/camelials/article/details/146099181</guid><author>camelials</author><pubDate>Mon, 10 Mar 2025 10:23:37 +0800</pubDate><description><![CDATA[介绍如何使用自定义注解在非 Spring Boot 项目中实现 Bean 自动注入及管理。]]></description><category></category></item><item><title><![CDATA[单JVM进程启动多个SpringBoot项目探索及调优]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/143406731</link><guid>https://blog.youkuaiyun.com/camelials/article/details/143406731</guid><author>camelials</author><pubDate>Thu, 31 Oct 2024 19:06:55 +0800</pubDate><description><![CDATA[使用SpringBoot技术栈进行REST HTTP接口开发服务时，一般来说如果模块较多或者涉及多人协作开发，大家会不自觉的将每个模块独立成一个单独的项目进行开发，部署时则将每个服务进行单独部署和运行。服务间的调用则通过FeignClients，服务的接入、负载、路由则是在前面摆个SpringCloud Gateway，同时服务注册/发现、配置则使用一个统一的Nacos。这样做好处显而易见，例如：开发时的代码冲突及分支合并、运行时系统资源分配及性能优化等都不打架、对某个服务的扩缩容也方便、K8S容器化也方便]]></description><category></category></item><item><title><![CDATA[Springboot服务HTTP/HTTPS双监听及路由]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/140844453</link><guid>https://blog.youkuaiyun.com/camelials/article/details/140844453</guid><author>camelials</author><pubDate>Thu, 01 Aug 2024 15:28:45 +0800</pubDate><description><![CDATA[一般来说SpringCloud Gateway到后面服务的路由属于内网交互，因此路由方式是否是Https就显得不是那么重要了。事实上也确实如此，大多数的应用开发时基本都是直接Http就过去了，不会一开始就是直接上Https。然而随着时间的推移，项目规模的不断扩大，当被要求一定要走Https时，就会面临各种困惑。]]></description><category></category></item><item><title><![CDATA[Java程序员Python一小时速成]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/139825723</link><guid>https://blog.youkuaiyun.com/camelials/article/details/139825723</guid><author>camelials</author><pubDate>Thu, 20 Jun 2024 17:08:09 +0800</pubDate><description><![CDATA[Java程序员Python一小时速成]]></description><category></category></item><item><title><![CDATA[开源DMS文档管理系统 Nuxeo Vs Alfresco对比及 API 使用概述]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/139301626</link><guid>https://blog.youkuaiyun.com/camelials/article/details/139301626</guid><author>camelials</author><pubDate>Wed, 29 May 2024 19:00:08 +0800</pubDate><description><![CDATA[文档管理系统（DMS：Document Management System）是一种软件系统，用于组织、存储、检索和管理电子文档和文件。这些文件可以是各种格式的电子文档，如文本文档、电子表格、图像、音频或视频文件等。]]></description><category></category></item><item><title><![CDATA[JTextField限制只能输入特定字符]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/138197664</link><guid>https://blog.youkuaiyun.com/camelials/article/details/138197664</guid><author>camelials</author><pubDate>Thu, 25 Apr 2024 19:52:44 +0800</pubDate><description><![CDATA[限制 JTextField 输入内容的原理涉及到对文本框中的文本进行监听和过滤。Java中，JTextField 使用 Document 对象来管理文本内容。Document 是一个抽象类，JTextField 默认使用 PlainDocument 的实例来存储文本。限制输入内容的原理通常涉及两个步骤：1、监听用户输入： 通过添加文本修改监听器（如 DocumentListener）或者拦截键盘输入事件（如 KeyListener），程序能够实时监测用户的输入行为。]]></description><category></category></item><item><title><![CDATA[Azure AD统一认证及用户数据同步开发指导]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/137932048</link><guid>https://blog.youkuaiyun.com/camelials/article/details/137932048</guid><author>camelials</author><pubDate>Mon, 22 Apr 2024 10:54:09 +0800</pubDate><description><![CDATA[本文主要目的为：指导开发者进行自有服务与Azure AD统一认证的集成，以及阐述云端用户数据同步的实现方案。本文除了会介绍必要的概念、原理、流程外，还会包含Azure门户设置说明，以及使用Fiddler进行全流程的实操验证，同时还会结合实际的业务需求提出具体的方案建议及关键实现方法的说明，以此达到开发指导的效果。]]></description><category></category></item><item><title><![CDATA[【手撸IM】通讯协议设计与实现]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/136879608</link><guid>https://blog.youkuaiyun.com/camelials/article/details/136879608</guid><author>camelials</author><pubDate>Wed, 20 Mar 2024 22:23:40 +0800</pubDate><description><![CDATA[之前说过要手撸一个 IM 需要考虑的东西太多了，以至于前期做的很多工作与 IM 本身其实并没有太多直接的关系，例如：分布式策略、接入服务等。上一篇抛砖引玉的介绍了消息IM的设计与实现，现在谈下如何设计与实现一个私有的通讯协议。]]></description><category></category></item><item><title><![CDATA[【手撸IM】消息ID设计与实现]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/136558285</link><guid>https://blog.youkuaiyun.com/camelials/article/details/136558285</guid><author>camelials</author><pubDate>Tue, 12 Mar 2024 11:14:36 +0800</pubDate><description><![CDATA[微信团队是这样看这个问题的：要解决消息的唯一性、顺序性问题，可以将一个技术点分解成两个：即将原先每条消息一个自增且唯一的消息ID分拆成两个关键属性——消息ID（msgId）、消息序列号（seqId），即消息ID只要保证唯一性而不需要兼顾顺序性（比如直接用UUID）、消息序列号只要保证顺序性而不需要兼顾唯一性，这样的技术分解就能很好的解决原本一个消息ID既要保证唯一性又要保证顺序性的难题。如何快速高效的生成消息数据的唯一 ID ，是影响系统吞吐量的关键因素。这里我给出一个分布式 IM 消息ID的实现。]]></description><category></category></item><item><title><![CDATA[Java轻量延迟重试队列实现]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/136452264</link><guid>https://blog.youkuaiyun.com/camelials/article/details/136452264</guid><author>camelials</author><pubDate>Mon, 04 Mar 2024 15:16:50 +0800</pubDate><description><![CDATA[很多开放平台都使用Webhook的方式进行外部系统数据同步或者通知，对于Webhook请求的对外发送不进行重试显然有点说不过去。使用简单的while一个条件去重试N次好像达不到什么效果，只能是说有重试而已，而使用消息队列中间件好像依赖又太重，于是索性自己动手写一个抽象范型延迟重试队列组件。]]></description><category></category></item><item><title><![CDATA[JAVA版网易云音乐格式转换器]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/135847884</link><guid>https://blog.youkuaiyun.com/camelials/article/details/135847884</guid><author>camelials</author><pubDate>Thu, 25 Jan 2024 17:03:35 +0800</pubDate><description><![CDATA[RC4 加密算法的核心思想是通过在初始状态下生成一个伪随机的字节流，然后将明文与这个字节流进行异或运算，从而得到密文。使用初始状态的 S-box（置换盒：Substitution Box）。S-box 是一个包含 0 到 255 的数字的数组，初始状态下是有序的。根据给定的密钥，通过对 S-box 的多次置换和交换来打乱其顺序，生成一个混乱的 S-box。使用经过打乱的 S-box。利用 S-box 生成一个伪随机的字节流，这个字节流被用作密钥流。将明文与密钥流进行异或运算，得到密文。]]></description><category></category></item><item><title><![CDATA[一套模仿WhatsApp消息API的接口设计]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/134858933</link><guid>https://blog.youkuaiyun.com/camelials/article/details/134858933</guid><author>camelials</author><pubDate>Thu, 07 Dec 2023 17:10:54 +0800</pubDate><description><![CDATA[一套模仿WhatsApp消息API的接口设计]]></description><category></category></item><item><title><![CDATA[AD & ADFS 小白级部署/配置/验证全程详解]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/134857159</link><guid>https://blog.youkuaiyun.com/camelials/article/details/134857159</guid><author>camelials</author><pubDate>Thu, 07 Dec 2023 16:16:12 +0800</pubDate><description><![CDATA[AD 及 ADFS 小白级部署、配置、验证全教程]]></description><category></category></item><item><title><![CDATA[一个通用树型数据结构表达及其紧凑序列化方法]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/134464402</link><guid>https://blog.youkuaiyun.com/camelials/article/details/134464402</guid><author>camelials</author><pubDate>Tue, 05 Dec 2023 16:02:55 +0800</pubDate><description><![CDATA[在面对树型数据结构对象的传输问题中需要对面2个问题：
1、如何表达具备父子关系的树型对象？
2、如果减少该对象在传输过程中的IO？
显然，对于问题1，如果可以定义一个通用的泛型数据结构在将来的类似问题的处理上会更加的方便。对于问题2，显然越小越好。下面我给出一个完整的实现示例，供大家参考。]]></description><category></category></item><item><title><![CDATA[高性能ChatGPT聊天机器人服务的设计与实现]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/130064321</link><guid>https://blog.youkuaiyun.com/camelials/article/details/130064321</guid><author>camelials</author><pubDate>Tue, 11 Apr 2023 16:35:52 +0800</pubDate><description><![CDATA[一个艺术成分很高的ChatGPT聊天机器人服务的设计与实现]]></description><category></category></item><item><title><![CDATA[一个用聊天的方式让ChatGPT写的线程安全的环形List]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/129824903</link><guid>https://blog.youkuaiyun.com/camelials/article/details/129824903</guid><author>camelials</author><pubDate>Tue, 28 Mar 2023 21:01:25 +0800</pubDate><description><![CDATA[一个用聊天的方式让ChatGPT帮我写的线程安全的环形List]]></description><category></category></item><item><title><![CDATA[WhatsAppBusiness官方说明导读及调研分析]]></title><link>https://blog.youkuaiyun.com/camelials/article/details/129745741</link><guid>https://blog.youkuaiyun.com/camelials/article/details/129745741</guid><author>camelials</author><pubDate>Sat, 25 Mar 2023 11:16:30 +0800</pubDate><description><![CDATA[WhatsAppBusiness官方说明导读及调研分析]]></description><category></category></item></channel></rss>