发现这一段写得不错:
openfire由java编写,基于xmpp协议,开源的实时协作服务器,具有跨平台能力,它是实现XMPP的server端包。Openfire和客户端是C/S架构。
优点:(1)内部集成web服务器 (2)插件机制,扩展方便,这个也是学习的大方向 (3)容量大,并行容载能力强 等
相信openfire大家都不陌生,网上关于安装和配置,详解的太多了。
我就记录一下学习的过程中遇到好玩的东西:
1.openfire服务器分为几个大块的栏目,其中用户栏就是所创建和登录的用户,好玩的是可以直接通过mysql来创建,只要指明了权限就可以直接登录openfire。这里进一步说明了数据库操作的权限的重要。这里比较搞笑的是,因为我忘记密码了,所以用root根权限删除了ofUser里面的所有用户,再重新创建一个,嘻嘻,说明技术最重要还是捣鼓出来的。
其中如果创建用户没有指明时间,时间戳是指定到1970,不知道为什么很多技术都对1970特别钟情。
群组聊天也是分为单独一栏,说明群聊的技术含量还是大。
2.会话端其实才是突显XMPP的最多地方:资源、node、状态、出席、优先级、客户端IP、关闭连接都是XMPP的核心内容啊
3. 当应用spark来演示通信的时候,会发现更多有趣的东西,技术名词的英文更需要我们的实践才能真真切切的了解这个文字的意义。
(1)Subscription 作为XMPP的一个重要内容,原来指的是好友请求那些消息的处理等。
(2)testone@127.0.0.1 username: 就是前面理论知识强调的 username@hostname 格式。
4.结合mysql输出内部的东西更能深入理解! 可惜的是Mac下居然不能同时打开spark实在是败笔啊。只能每次都退出重新登录,了解到已收到的消息openfire是不会帮你保存滴,只能帮你保存些离线消息。注意前后的细节和重要的东西,多模拟和联系!
输出ofOffline(即保存离线消息的表),我们可以看到:
我们可以清楚看到,由几个字段组成:username messageID creationDate messageSize stanza.
说明:messageID: ID of stored message (Primary Key) 消息ID是作为主键。
stanza: The message Text 消息文本
这些要从文档里面读出来,所以呢,加强读文档的能力哦。
原文:
username | VARCHAR | 32 | User Name (Primary Key) |
messageID | NUMBER | n/a | ID of stored message (Primary Key) |
creationDate | VARCHAR | 15 | Date message stored |
messageSize | NUMBER | n/a | Size of message in bytes |
stanza | TEXT | n/a | The message text |
我们可以到messageID从5开始,而不是从1开始,为什么呢? 原来用户一收到就会被删掉的哦。
最后,重头戏:stanza:我们随便挑选一个看看:
<message id="eGWh7-31" to="admin@127.0.0.1" from="test@127.0.0.1/Spark 2.6.3" type="chat">
<body> just test for first connection.</body>
<thread>6clv2f</thread>
<x xmlns="jabber:x:event">
<offline/>
<composing/>
</x>
</message>
细细品味,其实就是前面的东西,套的是 to from xml节 message流结构罢了。
软件的封装就是那么酸爽!
未解决问题:
1.ofOffline保存离线的消息,那么在线的消息,怎么保存,谁保存?
收获:理论+实践 才是正道!
待续: