搭建基于XMPP的即时通讯系统

XMPP Client Daemon:打造开源即时通讯应用 本文还有配套的精品资源,点击获取 简介:XMPP是一种开放标准的即时通讯协议,基于XML技术。XMPP Client Daemon(XCD)作为一个开源的客户端守护进程,允许开发者构建跨平台的Jabber协议应用程序。XCD支持连接管理、身份验证、会话管理、资源绑定、消息传递、实体发现、presence管理等关键功能,并遵循XMPP的扩展性原则,支持XEP家族的功能。开发者... 阅读详情

1 参考资料

2 即时通讯的相关知识

2.1 即时通讯的概述

即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能,常见的即时通讯工具有QQ、微信等。然而如果要搭建一个即时通讯系统,离不开即时通讯协议,今天要介绍的是基于XMPP协议的即时通讯系统。

即时通讯协议就是即时通讯系统在通讯时所需要遵循的规范,它定义了一些标准化的通讯数据格式和网络架构等。

即时通讯的常用协议
  1. 即时信息和空间协议(IMPP)
  2. 空间和即时信息协议(PRIM)
  3. 针对即时通讯和空间平衡扩充的进程开始协议(SIP)
  4. 可扩展通讯和表示协议(XMPP)
  5. 私有协议(自定义协议):为了更满足特定的需求和安全性,有些开发者会重新定义一套协议,这个成本是非常巨大的,一般是大厂干的事(例如腾讯)。

2.2 XMPP的相关知识

2.2.1 XMPP的定义

XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它继承了在XML环境中灵活的发展性,可用于实时消息传递、呈现和请求/响应业务。XMPP使用TCP传输XML数据流,属于应用层协议,而非传输层协议。XMPP官网   XMPP中文

XMPP协议的前身是Jabber,采取XMPP协议来实现IM主要是考虑XMPP协议是以XML为基础的。这表明XMPP是可扩展的,所以XMPP信息不仅可以是简单的文本,而且可以携带复杂的数据和各种格式的文件,也就是说XMPP协议不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流,目前支持XMPP协议的即时通讯工具有Gtalk、FaceBook IM、Twitter、网易POPO等等通讯工具,具有非常好的发展情景。

资料:即时通讯协议的选型之XMPP

2.2.2 XMPP的基本网络结构

XMPP中定义了三个角色,客户端,服务器,网关。

  • 服务器:同时承担了客户端信息记录,连接管理和信息的路由功能。
  • 网关:一个特殊用途的服务器端的服务,主要功能是把xmpp翻译成外部消息系统,并把返回的消息翻译成xmpp。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在其之上传输XML。
  • 客户端:通过TCP连接直接连接到服务器,并通过xmpp获得由服务器以及联合服务器所提供的全部功能。多个不同的客户端可以同时登陆并且并发的连接到一个服务器,每个不同资源的客户端通过xmpp地址的资源标识符来区分。
2.2.3 XMPP的通讯原理

XMPP通讯过程中传输的是与即时通讯相关的指令。只是协议的形式变成了XML格式的纯文本。

  1. Client1连接到服务器;
  2. 服务器利用本地目录系统中的证书对其认证;
  3. Client1指定目标Client2地址,让服务器告知目标状态;
  4. 服务器查找、连接并进行相互认证;
  5. Client之间(Client1与Client2)进行交互。

下面是一个XMPP通讯过程示例:

客户端(minstone)连接到一个XMPP服务器(127.0.0.1:5222/TCP),发送一条消息“Bye Bye”到另一个客户端(test),然后注销。

  • 1.客户端(minstone)发送连接请求到服务器

客户端:

<?xmlversion='1.0'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" to="127.0.0.1">
  • 2.服务器对请求应答

服务器:

<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'
from='127.0.0.1' id='1461777714'>
  • 3.服务器利用本地目录系统的证书对其认证

客户端:

<iq type="set" id="auth_2" to="127.0.0.1" >
<query xmlns="jabber:iq:auth">
  <username>minstone</username>
  <password>mypassword</password>
  <resource>Work</resource>
 </query>
</iq>
  • 4.服务器将相应的结果返回给用户端

服务器:

<iq from="127.0.0.1" id='auth_2' type='result'/>
  • 5.用户发送消息请求,并注销

客户端:

<message to="test@example.com" >
    <subject>Bye Bye</subject>
    <body>test 1449</body>
</message>
<presence type="unavailable" >
    <status>Logged out</status>
</presence>
</stream:stream>
  • 6.服务器返回注销信息

服务器:

</stream:stream>

以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream(XML流)。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节点)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一方发信给另外一方。通信的最后阶段是</stream>关闭流。

资料:xmpp基本概念

2.2.4 XMPP协议优点
  • 开放:XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。
  • 标准:互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP命名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
  • 证实可用:第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作着,并有数以百万计的人们使用XMPP即时通讯软件。
  • 分布式:XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。
  • 安全:任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TLS等技术的可靠安全性,已自带于核心XMPP技术规格中。
  • 可扩展:XML命名空间的威力可使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展有支持音视频传输的扩展协议Jingle。
  • 弹性佳:XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
  • 多样性:用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。
2.2.5 XMPP的协议缺点
  • 数据负载太重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的数据被重复转发,XMPP协议目前拥有一个大型架构中存在的数据提供给多个收件人。目前新的协议正在研究,以减轻这一问题。
  • 没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供二进制数据。因此,文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。

3 Openfire相关知识

3.1 Openfire的定义

Openfire一款基于Java开发的开源实时协作(RTC)服务器,基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器。

Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登录服务。

资料:  官网    github地址  Openfire教程网

3.2 Openfire的安装配置

安装配置过程请参照:Openfire安装教程

配置完成如下:
在这里插入图片描述

3.3 使用Spark登录Openfire

Spark是一款使用java开发的开源即时通讯工具,它可以登录基于XMPP协议搭建的即时通讯服务器并在其之上进行通讯(可理解为精简版QQ)。
spark

登录方式请参考上述Openfire安装教程博客内容,这里不再赘述。

4 Smack的相关知识

4.1 Smack的定义

Smack是一个开源,易于使用的XMPP(jabber)客户端类库。它封装了针对XMPP协议的即时通讯过程中的一些操作,如登录,注册,发送消息等等,使得开发者不必关心XMPP中大量的xml数据的处理。Spark就是使用了smack开发。

github地址

缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,一般1台机器只能模拟有限(数千个)客户。

注:

  • Smack是针对java开发的,所以适用于Android,smack所依赖的jar包可以通过FindJar找到,也可以通过gradle引用Maven库里面的library。

  • 针对iOS,通常使用第三方库XMPPFramework

  • 针对JS,网络上也提供了许多第三方库 Converse.js   Strophe.js

4.2 Smack的示例

下面是一段smack的登录示例代码:

XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
  .setXmppDomain("jabber.org")  //xmpp服务器域名
  .setHost("earl.jabber.org")  //xmpp服务器主机地址
  .setPort(8222)  //xmpp服务器端口
  .build();
AbstractXMPPConnection conn = new XMPPTCPConnection(config);
conn.connect();//建立连接
conn.login("username", "password");//用户登录

smack一直在更新升级,不同版本代码差异巨大,而且官方文档不够详细,网上找的资料基本是旧版本的代码,这个很坑!

5 后记

有兴趣的同学可以去github上看看本人写的安卓端的xmpp示例应用Android XMPP Demo

Android即时通讯应用开发:基于XMPP协议项目实战 本文还有配套的精品资源,点击获取 简介:本项目涉及在Android平台上利用XMPP即时通讯协议构建聊天应用。XMPP是一种开放标准,支持多种实时通讯场景。我们将深入探索如何使用Smack库来实现用户连接、消息发送接收、群组管理等功能,并讨论如何设计UI和处理导航,最终构建一个具备聊天、群聊及用户头像展示等功能的应用。 1. XMPP协议基础及应用 1.1 ... 阅读详情

相关推荐

xampp_stone_dup:xmpp石头包更新

XmppStone 轻量级XMPP客户端库完全用Dart编写。 我的意图是为基于Flutter的未来XMPP客户端编写易于使用的库。 支持的文件: RFC6120 :可扩展消息和状态协议(XMPP):核心 RFC6121 :可扩展消息和状态协议(XMPP):即时消息和状态 XEP-0198 :流管理 XEP-0085 :聊天状态通知 XEP-0318 :客户端启动的状态探针的最佳实践 XEP-0280 :消息碳 部分支持: XEP-0030 :服务发现 XEP-0313 :邮件归档管理 积极致力于: XEP-0059 :结果集管理 XEP-0004 :数据表单 最新消息 2020-10-30:添加了对XEP-0280的支持:Message Carbons 2020-10-30:添加了对XEP-0313的初始支持:消息存档管理 2020-10-30:添加了日志记录机制 2020-

XMPP 开源项目教程

XMPP 开源项目教程 1. 项目介绍 XMPP(Extensible Messaging and Presence Protocol,可扩展消息与在线协议)是一个开源的即时通讯协议,广泛用于各种即时通讯应用、物联网(IoT)、在线游戏等领域。XMPP 是一个分布式、去中心化的协议,支持多种扩展,能够满足不同应用场景的需求。 XMPP 的核心特点包括: 去中心化:没有中央服务器,任何人都可以在自...

gitblog_01074的博客 1073

xmpp_flutter:利用Xmpp Stone库在Flutter中编写的Xmpp客户端

simple_chat 利用Xmpp Stone库的简单聊天应用程序

XMPP即时通讯mac系统下ejabberd服务器环境搭建

对于XMPP即时通讯协议,我就不在这多说了,如果各位有心思去研究的话,我在这也提供一个网址:http://wiki.jabbercn.org/index.php?title=Ejabberd2:安装和操作指南&diff=prev&oldid=785 下面我就来说说ejabberd服务器环境搭建: 1、下载macports并安装。 mac os 10.8系统macports安装包:macpor

Abel的专栏 5391

XMPP权威指南 (利用jabber构建实时聊天应用).pdf

XMPP由Jabber软件基金会开发,最早在Jabber上实现。Jabber项目由Jeremie Miller在1998年开始的一个免费、开源的项目,用于提供给MSN、Yahoo!的IM服务。由于XMPP是一种基于XML架构的开放式协议,在IM通讯中被广泛采用。 XMPP的基础部分已经在2002-2004年得到了互联网工程任务组(IETF)的批准, 这意味着XMPP在将来就像我们认为理所当然的Internet协议TCP/IP、HTTP、FTP、SMTP、POP一样成为Internet标准;这 意味着以后我们就像使用Web、使用Email和使用FTP一样开放地使用IM。 XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。

ESP8266连接阿里云(STM32)

一、概述 之前通过串口调试助手+ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266进行串口通信,相当于使用STM32代替之前使用的串口调试助手来发送AT指令。只是发送的字符串数据可能有些细节需要注意一下。 二、保存连接的AT指令 定义几个字符串数据保存需要发送的AT指令 //注意: //末尾记得加\r\n //字符...

xyx0610的博客 4万+

【服务器】基于jabber(XMPP)架设内部即时通讯服务

Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。     XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XM

YING 1486

最小路径和——动态规划求解(Java实现)

最小路径和——动态规划求解(Java实现) 题目: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 这题和机器人走路的思路类似,就是状态方程有所不同,...

weixin_43395911的博客 895

使用开源jabber(XMPP)协议及openfire架设内部即时通讯服务

Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP

低调的华丽的专栏 1735

傻白入门芯片设计,SystemVerilog Assertion(SVA)学习(二十一)

对SVA(SystemVerilogt Assertion)有了更深刻的认识,对经典的AveMC形式验证工具进行了介绍

qq_46675545的博客 8471

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 605

基于jabber(XMPP)架设内部即时通讯服务

Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP

然 3202

人形机器人五大核心零部件技术解析与国产化实况

人形机器人并非简单机械集成,而是物理、能量、感知、决策与执行五层系统毫秒级协同的复杂体。其性能瓶颈往往不在于整机算法,而深植于谐波减速器的刚度稳定性、无框力矩电机的功率密度与温升控制、六维力传感器的动态响应与温漂抑制、运动控制器的实时OS生态及灵巧手的多指协同精度等底层硬件能力。这些部件共同构成整机68.3%的成本,且国产化率差异显著——谐波减速器达72%,而高精度力矩传感器仍受制于日德厂商。本文聚焦‘谐波减速器’和‘六维力传感器’两大热词,从材料工艺、参数定义、失效模式到产线验证,揭示真正卡脖子的技术关卡

weixin_29065959的博客 406

XMPP协议

IM(即时通讯技术)Yahoo IM、MSN、QQ 各自通讯数据传输协议的不同  基于XML且开放的通讯和表示协议  在jabber协议基础上的 数据格式 目标是支持企业环境内的即时消息传递和联机状态应用程序 扩展协议Jingle使得其支持语音和视频,但ios尚不支持 官方文档RFC 3920    典型的C/S架构:只能是客户端访问  B/S指的是浏览器访问  TCP方式连接客户

woshixixi260324的专栏 472

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 668

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 500

iOS XMPP搭建IM

XMPP框架地址: https://github.com/robbiehanson/XMPPFramework    eJabberd服务器:https://www.process-one.net/en/ejabberd/downloads  Spark: http://www.igniterealtime.org/downloads/download-landing.jsp?file=s

weixin_40873814的博客 1370

Mybatis面试题(基础篇)

(1)mybatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。(2)mybatis避免了几乎所有的JDBC代码(说明了mybatis底层用的就是JDBC,只不过是封装了)和手动设置参数以及获取结果集。(3)mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。

qq_38196449的博客 1687

XMPP 搭建系统的 小结

框架选用 服务器使用的是openfire的开源框架 iOS使用的是xmppFramework 自行github Android使用的是smack (aSmack 已经弃用,目前使用的是 smack ) 本文不过多记录实现,具体实现自行百度。 目标 1 服务器 用户的创建 用户的注销 群组的创建 群组的注销 好友的添加 好友的删除 用户信息设置获取 支持私聊推送 2 手机端 基本收发 文...

有酒有故事 411

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

XMPP聊天软件客户端开发(1)

在此记下我做这个项目的过程,遇到的难点和问题。OK,项目开始问题当然是怎么去开发。 在初步了解XMPP是一个协议就可以知道这个开源的协议会有很多实现,无论是服务端还是客户端。所有软件基于XMPP来编写,就是面向接口编程的思想。整个项目的架构如下: 服务端:直接使用Openfire服务器,这个服务器很简便,基本把许多功能都实现了,而且安装简便。开发客户端基本上不会接触服务端的代码。客户端:开发

喝雪碧肚疼啊 781

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

采用spark和openfire实现即时通讯系统

名词解释:  Xmpp: 采用xml数据封装格式的点对点通讯协议。是目前最流行,通用的即时通讯协议。 Spark: 即时通讯客户端,类似QQ和MSN应用,代码实现采用smark类库(xmpp客户端类库),spark和smark都是开源的项目。采用Java语言编写. Open

wukunting的专栏 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 初入坑xmpp即时通讯(一)

之前做了一个神秘的政府项目,此处保密。里面用的东西奇多,又是专网。抛弃了各种第三方。原本刚来,不知道是用专网(这里近似看作局域网吧),我很兴奋的用极光,环信还有网易云之类的,还互相比较,最后慢慢写,写了近一个星期,就只差群聊就做完了。。。然后被通知是专网。。全部删掉了。想哭。。。 这里还是建议考虑项目需求,再选择使用那种方案,用第三方的这些集成好的sdk也挺好的。 XMPP(E

qq_30548105的博客 831

XMPP聊天程序iPhone版开发(一):初识XMPPFramework

由于前几天一直在写一个图片下载的第三方库,所以工作中需要做XMPP聊天的工作一直放着,到前天到开始研究XMPP,结果其过程是各种蛋痛~ 如今总算是有些收获~所以把其中的过程记录下来~希望对各位有些帮助~ 服务器端我用的是公司搭建的ejabberd服务器,服务器端搭建在这我不做讲解~ 一、XMPP介绍 简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务

Abel的专栏 2925

zz基于jabber(XMPP)架设内部即时通讯服务

Jabber 是著名的即时通讯服务服务器,它是一个自由开源软件,能让用户自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用。 XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XM...

wtsusheng的专栏 154

iOS 实现XMPP协议

之前做过socket的聊天  可以做到群聊 文字+语音聊天 但是一对一的 加好友之类的 还没实现,服务器端写不来 呵呵 查了资料发现 现在的聊天服务器有开源的  有很多种  很多都是机遇xmpp协议来实现的,xmpp的前身是什么jabber  这个就自己去百度了 我用的一个开源服务器是 openfire 他有 linux mac window版本 他的安装都是比较简单的就部介绍了  网上找到了这

屎壳郎情调-成长日记 5507

IM开发-XMPP iOS开发(转)

最近项目中需要集成IM功能,市面上有很多的第三方提供im服务,比如环信、融云等,但都有使用限制的地方,如果不使用第三方可以自己去实现一套IM系统,不过一个IM系统涉及到的东西比较多,开发难度较高。另一种选择是使用xmpp,xmpp的优点是有很多的开源实现,比如服务端的ejabberd、Openfire,iOS以及安卓端都很优秀的开源库可以使用,而且传输安全以及扩展性强等(环信也是基于xm...

245
上一篇: 支持笔锋效果的手写签字控件
下一篇: 垃圾代码是如何写出来的
程序猫King
博客等级 码龄14年 5580粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猫King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值