XMPP就是Jabber协议的正式名称。其核心协议就是一个通过socket等媒介发送XML的规范。非常简单,好实现。
先是通过socket建立一个网络连接
然后客户端向服务器发送一个<stream:stream....>这样的XML开始标签
然后服务器会返回一个<stream:stream...>这样的标签,作为握手信号
然后这就标志着双方可以开始XML流的互通了
断开似乎不需要发送</stream:stream>,但也不一定,需要再详细阅读一下协议。目前是直接断开socket连接,并没有多大问题。
中间的XML流的互通的形式是<iq id='abc'>...</iq>这样的一个XML节(XML Stanza)的发送过去然后服务器用<iq id='abc'>...</iq>这样的XML节来回应。目前核心协议规定的XML节有三个presence, iq, message。
综观整体的协议沟通的过程,就是把一个完整的XML文件一段一段的发送过去,<stream>是根节点,然后每次发送的是根节点下的那些次根节点。

所以目前用Delphi实现需要三个类:
TXMPPClient(继承自TIdTCPCustom)
TXMPPListenerThread(继承自TIdThread,因为这个Thread比VCL那个要好用一些。需要专门的侦听线程是因为XMPP没有像HTTP那样有明确的一问一答的应答形式。像message这种XML Stanza可能在任何时候到达。所以需要一个专门的侦听线程不断的从系统的Socket Stack中把东西读出来)
TXMPPProtocol(这个用来实现基于核心协议之上的那些表达即时通讯逻辑的网络通讯逻辑,比如发送消息啊,上线啊这些。作为TXMPPClient的事件的接收者)

目前实现的核心在TXMPPClient上,需要四个基本的功能,Connect(连接上之后自动发送<stream开始标签,并且能判断是否握手成功),Send Stanza(发送一个XML节),Stanza Received(当收到一个XML节的时候调用所有注册的回调函数),Disconnect(断开连接,干净安全)。即便就这简单的四个功能也需要Client和侦听线程的同步与配合,并不是太简单无味的事情。等明天晚上具体把这些都实现了就可以开始着手吧上层协议一项项做出来了。

XMPP核心协议客户端相关推荐

  1. android 通过xmpp即时聊天客户端往服务器发消息,利用XMPP协议推送服务器告警信息到安卓平台及桌面...

    XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议. XMPP目前被IETF国际标准组织完成了标准化工作.标准化的核心结果分为两部分: 核心的XML流传输协议 基于XML流传输的即时 ...

  2. java xmpp 框架_即时聊天IM之三 XMPP协议客户端库的和Android端框架概述

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com smack ...

  3. 亿级日PV的魅族云同步的核心协议与架构实践

    声明:本文根据msup和魅族联合举办的<第三期魅族技术开放日-架构设计与优化>录音整理原创首发,转载或节选内容前需获授权.  嘉宾:沈辉煌,魅族高级架构师,魅族云同步负责人.2010年加入 ...

  4. http 错误 404.0 - not found_python3从零学习-5.10.8、http.client—HTTP 协议客户端

    源代码: Lib/http/client.py 这个模块定义了实现 HTTP 和 HTTPS 协议客户端的类. 它通常不直接使用 - 模块 urllib.request 用它来处理使用 HTTP 和 ...

  5. 一文了解EPaxos核心协议流程

    简介: EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景.但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPa ...

  6. 蓝牙核心协议学习 -- 基带协议(Baseband)翻译最终版

    2021-10-27 蓝牙核心协议学习 -- 基带协议(Baseband) 剩余篇章已上传到资源分享,链接如下: baseband翻译.pdf-其它文档类资源-CSDN下载 baseband翻译.pd ...

  7. 蓝牙核心协议学习 -- 基带协议(Baseband)

    目录 1 概述 1.1 蓝牙时钟 1.2 蓝牙设备寻址 1.2.1 保留地址 1.3 访问码(ACCESS CODES)                                         ...

  8. 【BLE】蓝牙4.2核心协议

    [BLE]蓝牙4.2核心协议 1. 顶层设计 1) Application层 顶层,通过API函数与协议栈交互: 2) Host层 主体结构,TI提供封装后的lib库,不提供源码: 逻辑链路控制及自适 ...

  9. 蓝牙核心协议  蓝牙芯片结构

    1 Bluetooth Core System Protocol(蓝牙核心协议) 蓝牙技术规范(specification)包括核心协议(protocol)和应用规范(profile)两个部分. 核心 ...

最新文章

  1. CoRL 2020奖项公布,斯坦福获最佳论文奖,华为等摘得最佳系统论文奖
  2. Java注释@interface的用法
  3. java webdriver page object_Selenium+PageObject+Java实现测试用例
  4. python sns绘制回归线_SVM--支持向量机amp;Python代码
  5. 秒拍,一款为你纪录万千世界的好玩短频App是怎么运作的?
  6. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。
  7. 网页中竖的目录怎么改成横的_怎么学习手绘插画?小白也能入门哦
  8. linux命令切换tty
  9. 学计算机还要写作文吗,第一次学电脑作文3篇
  10. Flume-NG源码阅读之Interceptor(原创)
  11. mencoder_有用的Mplayer / Mencoder命令
  12. C++ Interesting卡常数
  13. #踩过的坑# 企业微信被封了怎么办?
  14. Python|制作汉堡的解题方法
  15. uniapp 自写模糊查询
  16. 计算机硬盘的种类,硬盘类型 - 硬盘使用知识大全(2)
  17. leetcode:32. 最长有效括号
  18. 【微信小程序】可拖拽操作的“树状图”模块的制作和小程序经验的总结
  19. ERP项目文档--想到用时方恨少
  20. 模仿360安全卫士项目笔记9

热门文章

  1. 上海电力学院计算机组成与结构试卷,上海电力学院试卷及成绩管理办法
  2. android 中xml文件的各种样式的学习
  3. 浅谈Proxmark3 Easy Gui 4.0 5.0 5.1加强版
  4. 向前、向后、横着走,双足机器人Cassie,靠深度强化学习学会了走路丨论文
  5. 20年未解的MIT密码难题,被自学成才的程序员破解了,比预计早15年
  6. 三星1万亿元重金下注,推动AI、5G、半导体等项目的研究
  7. 一架无人机加入警队4个月,墨西哥小城犯罪率下降了10%
  8. 长沙火宫殿城大庙会迎客 演绎传统与潮流交融
  9. zabbix之 qq邮件报警
  10. mybatis 之动态SQL