rainzhaojy / blogs

200 stars 28 forks source link

XMPP协议里的一些巧妙的设计 #7

Closed rainzhaojy closed 6 years ago

rainzhaojy commented 7 years ago

指责XMPP属于PC时代而不适应Mobile时代似乎也是一种政治正确了,其实大多数的指责可能都是人云亦云,大多数人可能也并不深入了解XMPP协议。没错,XMPP诞生的时候还没有智能手机,因此并没有生来就为mobile而设计,XMPP协议也很繁杂,全面了解XMPP协议集并不那么容易,但是XMPP完整解决了IM通讯产品领域的绝大多数问题,很多问题解决的也很巧妙,这些设计思路和解决方案并不仅仅适用于XMPP,也适用于任何非XMPP的分布式通信产品中,因此即使不使用XMPP,了解这些巧妙的设计也是非常有用的,接下来介绍一些。

Resource ID

在mobile时代,多终端登录很常见,XMPP里bare jid(格式为"user@example.com")用于表示某个用户, full jid用于表示某个具体的endpoint(格式为"user@example.com/resourceID"), full jid里的resourceID很好的支持了多终端登录,你的产品里也许叫device id, location id, 但本质上和resource id是一样的思路。

Service Discovery

XEP-0030定义了一种发现服务的机制。

Capabilities

XEP-0115定义了发现buddy能力的机制,方便的实现向前向后兼容。

DNS SRV Lookup

用户"alice@cisco.com", "_xmpp-client._tcp.cisco.com", isj3cmx.webexconnect.com

Extensibility

Decentralized