断断续续翻看了一周Vysper的源码,略有收获吧。之所以说略有,是因为它给我带来的收益没有mina多,mina直接提升了我对java nio、线程池和消息缓冲队列在实际应用方面的认知,并再次发现所有程序中都可见到操作系统所涉及的基本问题和原理,诸如读者写者问题、消息缓冲等等(回头得重新拿起大学时的操作系统教科书看看)。
Vysper源码带给我的收获就是“灵活性”。也许会有人觉得这样很扯,灵活性有什么好说的,但毕竟知易行难,其实“灵活性”三字说的容易,做起来蛮难的。本人写程序时也会努力往“灵活性”这个方向走,但很多时候由于悟性不够高,思考深度不够,最终写出来的程序还是不够灵活,重构又不划算,最终只能尽量微重构了。
正如Vysper在它项目主页中所介绍的“Apache Vysper aims to be a modular, full featured XMPP (Jabber) server.”,模块化是它的最大特性之一,提供了很多接口,如AccountManagement(帐户管理)、OfflineStanzaReceiver(离线消息处理)、RosterManager(通讯录管理)等等,从而非常方便做二次开发,甚至在不需要熟读源码的情况下就可以去整合适用于自己企业的IM了。
下面来说说Vysper的大体运行流程:
1)客户端连接过来,触发XmppIoHandlerAdapter#sessionCreated方法,从而完成和服务器的连接。
2)客户端陆续发送一些消息到服务器端,触发XmppIoHandlerAdapter#messageReceived方法(在该方法内,message已经是Stanza类型了,因为数据经过了XMPPDecoder的处理)。
3)messageReceived方法最终会触发ProtocolWorker#processStanza方法,接着根据stanza类型获取对应的StanzaHandler,尝试处理必要的发送地址改写(发送至其他server的情况)。
4)在StanzaHandler中根据策略可能会尝试TLS握手&SASL握手,之后就正式开始消息的转发、存储等逻辑(主要就是Message,Presence和IQ)。
a) 数据若是发送至其他server,会根据stanza的目标地址连接对方server并发送数据。
b) 数据若是发送至本server内的其他账户,会尝试找出最佳匹配的session再发送数据,当一些类型的数据无法送达时,会根据存储逻辑的设置来决定是否把stanza暂时存起来,方便后面该目标账户连线时可以获取到该stanza。
5)最后,还有XmppIoHandlerAdapter#exceptionCaught处理异常情况,XmppIoHandlerAdapter#sessionClosed处理连接关闭情况。
好了,Vysper的整个运行结构基本清楚了,下一步就该看看XMPP协议了。是的,我都还没看过协议就开始看Vysper源码了,虽然现在最新的是rfc6120,但Vsyper 0.7是基于rfc3920这个已废弃的协议写的,所以我也还是先看看rfc3920好了。(在这里可以推荐一个我近期发现的网站,里面有中文版的XMPP协议,网址是www.jabbercn.org 。)
下一步的目标:了解RFC3920和若干XEP协议,进而开始实现自定义的AccountManagement(帐户管理)、RosterManager(通讯录管理)接口。一个基于企业邮箱通讯录打造的XMPP服务器即将诞生,详见 qiyeliao.com 哦!!!
相关推荐
小程序源码 云笔记 (代码+截图)小程序源码 云笔记 (代码+截图)小程序源码 云笔记 (代码+截图)小程序源码 云笔记 (代码+截图)小程序源码 云笔记 (代码+截图)小程序源码 云笔记 (代码+截图)小程序源码 云笔记 (代码+...
nginx项目源码学习及笔记.zip
狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神SpringBoot笔记+源码 狂神...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为...基于Django3.2+py3.9的靓号管理系统python源码+学习笔记.zip
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
zuul源码学习添加笔记,官方项目代码_ZuulC
总之,Spring源码学习是一个深化编程技能,理解设计模式,以及提高问题解决能力的过程。通过深入研究,程序员不仅可以优化自己的代码,还能更高效地利用Spring框架提供的功能,提升项目的可维护性和扩展性。
【Java学习笔记(源码)】是一份详细记录了Java编程语言学习过程的资源集合,包含实际的源代码示例。这份笔记旨在帮助初学者和有一定经验的开发者深入理解和掌握Java语言的核心概念、语法以及常见应用。以下是笔记中...
微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小程序 云笔记 (源码)微信小...
微信小程序源码 云笔记(学习版)微信小程序源码 云笔记(学习版)微信小程序源码 云笔记(学习版)微信小程序源码 云笔记(学习版)微信小程序源码 云笔记(学习版)微信小程序源码 云笔记(学习版)微信小程序源码 云笔记(学习...
为知笔记开源项目程序源码,实现云笔记功能需要自己搭建服务器 为知笔记开源项目程序源码,实现云笔记功能需要自己搭建服务器 为知笔记开源项目程序源码,实现云笔记功能需要自己搭建服务器 为知笔记开源项目程序...
STL源码剖析读书笔记 STL(Standard Template Library)的源码剖析读书笔记是对经典著作的总结,涵盖了STL的六大组件、空间分配器、迭代器、仿函式、适配器和容器等知识点。 1. 六大组件 STL提供六大组件,彼此...
学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及Demo源码.zip学习Ruby的笔记以及...
Android最流行的网络请求框架OkHttp的源码的阅读笔记; 详细解读了请求的构建以及执行流程,应用的设计模式以及该设计模式的应用场景等
统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于Python算法实现源码.zip 统计学习方法笔记-基于...
在《Spring Boot》源码学习笔记中,我们可以深入理解其内部工作机制,包括自动配置、起步依赖、命令行接口(CLI)以及如何集成各种组件如JSP等。JSP(JavaServer Pages)是一种用于动态创建网页的技术,Spring Boot ...
《nginx源码学习笔记》.pdf
前端项目源码:模仿有道云,个人制作的一款多人协同的云笔记 前端项目源码:模仿有道云,个人制作的一款多人协同的云笔记 前端项目源码:模仿有道云,个人制作的一款多人协同的云笔记 前端项目源码:模仿有道云,...
学习源码可以让我们了解引用计数和分代回收等策略,以及如何避免常见的内存问题。 3. **标准库**:Python的标准库包含了大量预装模块,如os、sys、math等。深入源码可以揭示这些模块是如何实现特定功能的,比如文件...