app后端设计(2)--xmpp的使用(2014.01.14更新)

2023-05-16

在app中有时候是需要添加聊天服务,在这里谈谈曾经开发聊天服务的经验:

 

(1)聊天服务端选的openfire,这是一个基于xmpp协议的聊天服务器(XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 gtalk,网易泡泡,facebook聊天等都是基于xmpp,具有广泛的包容性)。

 

网页上的聊天,使用的是strophe.js ,有一本书《XMPP高级编程:使用JavaScript和jQueryXMPP高级编程:使用JavaScript和jQuery》是基于这个strophe.js,里面的例子对于初学xmpp具有极大的参考价值。

 

(2)xmpp除了可以提供聊天服务,还可以充当消息服务器,例如有什么消息需要推送到客户端却不希望使用推送工具,xmpp也是个选择。

 

(3)有时候同一个账号需要在不同的客户端同时登陆服务端,例如,网页端和ios会出现用同一个账号登陆聊天服务器的情况,为了保证两个客户端都能收到聊天消息,需要做下面两地:

a.相同的账号需要使用不同的resource,可用时间戳生成,如vim@gmail/1359956556,vim@gmail/1359956777。

b. 在后台 Admin Console> Server Manager > System Properties中,设置“route.all-resources”为true

 

(4)一些常用的openfire插件

 

Subscription: 官方的描述是这样的:Automaticallyaccepts or rejects subsription requests

 

http://download.csdn.net/detail/newjueqi/6024521: 一个保存openfire聊天记录的插件,当根据我的使用经验,这个插件是把全部聊天记录保存在一个表中,性能极差,只能勉强应付法律规定要保存3个月聊天记录这个需求,在实际应用中没啥用。

 

(5)php的xmpp library

 

如果服务器是使用php,那么能使用的xmpp客户端就只有xmpphp,这个libary只提供了最基本的发送消息功能,很多常用的功能都没有提供,我根据开发经验把一些常用的xmpp功能开发出来,并整合到xmpphp中:

 

registerNewUser            //注册一个新用户

addRosterContact           //发送添加好友的请求

accept friend request      //接受好友请求

deleteRosterContact        //删除某个好友

roomMessage                //发送群聊消息

createChatRoom             //创建群聊

kickUserOutToChatRoom      //把某个人剔除群聊

 

项目的地址:

https://github.com/newjueqi/xmpp

 

(6)个人开发了一个openfire插件,在手机的聊天应用中,经常出现的一个需求就是把用户的离线消息通过推送系统推送到用户的手机上,为了实现这个功能,本人就开发了本插件,这个openfire 插件是拦截了发给openfire用户的离线消息,然后根据自身的业务逻辑推送到手机上。详细介绍:http://blog.csdn.net/newjueqi/article/details/18032925


(7)openfire中发送某些特殊字符会断开xmpp连接的问题,解决方法请看:http://blog.csdn.net/newjueqi/article/details/18260197


另外一个好消息,https://layer.com/ ,这个网站打算提供一个聊天平台,ios 和android 应用简单整合就能提供聊天服务,密切关注中。如果真的能实现,那么对于app提供聊天服务是个很好的选择。

 

但有几个问题:

1. 它现在还没正式上线

2. 访问外国网站的风险

3. 法律规定要保存3个月聊天记录

 

 

app后端系列文章总目录

 

 

///

2014.06.25更新

关于创建群组的例子,请看XMPPHP/test.php 文件中的 createEventChatRoom()

 

/

修改记录:

1. 2014.01.13: 增加了个人开源的openfire插件信息 

2. 2014.01.14: openfire中特殊字符导致断开连接的处理

 

如果您觉得这系列的文章对你有所帮助,欢迎打赏。
支付宝账号:190678908@qq.com 收款人:曾健生


[文章作者]曾健生

[作者邮箱]h6k65@126.com

[作者QQ]190678908

[新浪微博] @newjueqi

[博客]http://blog.csdn.net/newjueqi

http://blog.sina.com.cn/h6k65

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

app后端设计(2)--xmpp的使用(2014.01.14更新) 的相关文章

  • 安装windows+两个ubuntu(三系统)成功案例

    在已有的win10 43 ubuntu18 04双系统基础上 xff0c 再安装一个ubuntu20 04 原有配置 1T固态硬盘 43 2T机械硬盘 xff1b 固态硬盘上已经安装了win10 xff0c 机械硬盘上一个分区已经安装了ub
  • Windows 文件资源管理器中搜索带特殊字符文件名的方法

    今天处理一些文件 xff0c 文件夹这包含有类似 16年普通高等学校招生全国统一考试 英语 的文件名 xff0c 想全部找出来删除掉 xff0c 直接在文件资源管理器里面输入 是搜索不到想要的文件的 xff0c 这些是特殊字符 xff0c
  • ROS学习记录——Gazebo 里添加自己的物体模型

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 一 下载3D模型 二 编辑三维模型 1 使用sketch up 2 使用blender编辑 三 将三维模型导入Gazebo 1
  • 【NEUQ RM SI战队项目开源】gazebo仿真开源

    NEUQ RM SI战队项目开源 gazebo仿真开源 写在前面演示视频第一部分 xff1a 机器人仿真环境正文 xff1a 基于gazebo的RM仿真环境贡献照片墙 写在前面 一个新冠疫情 xff0c 打乱了所有队伍的备赛计划 xff0c
  • 嵌入式软件高频面试题

    本文转载自公众号 xff1a 嵌入式Hacker 原文地址 xff1a 职场人生 嵌入式软件高频面试题 一 进程与线程 1 什么是进程 线程 xff0c 有什么区别 xff1f 进程是资源 xff08 CPU 内存等 xff09 分配的基本
  • Ubuntu下硬件信息的查看

    一 相关命令 1 查看cpu信息概要 xff1a lscpu 2 大而全的命令 xff08 查看cpu的信更加全面 xff09 xff1a cat proc cpuinfo 3 查看整个系统的硬件信息 xff1a lshw 如果觉得终端看起
  • 我的2011—前脚踏进了IT行业的一步,大一Java开发学生。

    我写这个犹豫了很久 xff0c 想想在CSDN都是在这条路上走了几年的 xff0c 十几年的 xff0c 我还只是走了半年的一个90后 但是 xff0c 在这半年里 xff0c 我的感触颇深 xff0c 所以就献丑了吧 从高考完了的那一天就
  • Shell 脚本监控磁盘空间

    df 命令可以展示文件系统的磁盘有效空间信息 如果不指定文件名 xff0c 则当前所有挂载的文件系统有效空间信息 实现步骤 使用 df 查看磁盘信息使用 grep命令 过滤文件系统 xff0c 获取空间使用百分比通过Shell 脚本进行监控
  • R 实现熵权法计算权重

    按照信息论基本原理的解释 xff0c 信息是系统有序程度的一个度量 xff0c 熵是系统无序程度的一个度量 xff1b 根据信息熵的定义 xff0c 对于某项指标 xff0c 可以用熵值来判断某个指标的离散程度 xff0c 其信息熵值越小
  • R实现KMeans聚类算法教程

    本文和你一起学习无监督机器学习算法 kmeans算法 xff0c 并在R中给详细的实现示例和步骤 什么是k means聚类算法 聚类是从数据集中对观测值进行聚类的机器学习方法 它的目标是聚类相似观测值 xff0c 不同类别之间差异较大 聚类
  • 如何在Java中调用Python

    Python语言有丰富的系统管理 数据处理 统计类软件包 xff0c 因此从java应用中调用Python代码的需求很常见 实用 DataX 是阿里开源的一个异构数据源离线同步工具 xff0c 致力于实现包括关系型数据库 MySQL Ora
  • 集群多机ROS通信中间件:swarm_ros_bridge

    最近写了一个无线网络环境下 xff08 比如WIFI xff09 多机ROS通信的ROS包 swarm ros bridge xff1a https gitee com shu peixuan swarm ros bridge 该项目已被R
  • ClickHouse 基于角色访问控制(RBAC)最佳实践

    本文介绍ClickHouse RBAC访问控制模型 包括如何启用SQL管理 xff0c 创建管理员用户 xff0c 创建角色 xff0c 授权 xff0c 细粒度列和行级授权 并通过示例进行验证实现过程 启用RBAC 在users xml中
  • ClickHouse服务端配置最佳实践

    安装好ClickHouse xff0c 需要对服务和用户进行配置 本文介绍ClickHouse建议配置方式 xff0c 配置项修改后是否需要重启 xff0c 另外还提供一些实例配置加深理解 独立自定义配置 Clickhouse 服务端配置包
  • 2014年度总结——软件产品化的简要理解

    2014年度总结 软件产品化的简要理解 2014年转瞬即逝 xff0c 真是让人感慨 xff0c 岁月不是一天天在逝去 xff0c 而是一年年 xff1b 总结一年的工作非常有意义 xff0c 觉得今年最大的变化就是从定制软件到产品化的过度
  • R语言中mean函数

    mean函数是求算术平均值 用法 xff1a mean x trim 61 0 na rm 61 FALSE x是数值型 逻辑向量 trim表示截尾平均数 xff0c 0 0 5之间的数值 xff0c 如 xff1a 0 10表示丢弃最大1
  • 使用Spring @DependsOn控制bean加载顺序

    使用Spring 64 DependsOn控制bean加载顺序 spring容器载入bean顺序是不确定的 xff0c spring框架没有约定特定顺序逻辑规范 但spring保证如果A依赖B 如beanA中有 64 Autowired B
  • 使用R中merge()函数合并数据

    使用R中merge 函数合并数据 在R中可以使用merge 函数去合并数据框 xff0c 其强大之处在于在两个不同的数据框中标识共同的列或行 如何使用merge 获取数据集中交叉部分 merge 最简单的形式为获取两个不同数据框中交叉部分
  • 介绍java中Pair

    介绍java中Pair 在这篇文章中 xff0c 我们讨论了一个非常有用的编程概念 xff0c 配对 Pair 配对提供了一种方便方式来处理简单的键值关联 xff0c 当我们想从方法返回两个值时特别有用 在核心Java库中可以使用配对 Pa
  • python numpy 中linspace函数

    python numpy 中linspace函数 numpy提供linspace函数 有时也称为np linspace 是python中创建数值序列工具 与Numpy arange函数类似 xff0c 生成结构与Numpy 数组类似的均匀分

随机推荐