Mosquitto持久层群推消息实现思路
来源:互联网 发布:中英互译的软件 编辑:程序博客网 时间:2024/06/09 18:06
http://www.jouhu.com/blog/?p=2632
1 前言
最近在考虑Android平台下基于Mosquitto实现持久层的群消息推送的问题,在这里整理一下思路。以为实现做准备。
2 Mosquitto项目说明
Mosquitto项目是一个基于IBM MQTT协议的消息通讯服务器端,作者在考虑到Windows以及Linux及其他平台通用性的要求下,采用了select模型。按照模型本身,其所支撑的实时在线用户不要超过3000为宜。如果需要实现更多用户的群发,可以参考本博客另外一个文章 Android和iPhone平台的一种集群推送服务架构。
3 实现的思路
3.1 Android端用户下载客户端安装,然后启动允许推送后,生成其唯一ID号。
3.2 客户端使用该唯一ID号登录Mosquitto端后,将该ID插入DB Server,如MYSQL,同时将该ID插入Memcached。参考代码read_handle_server.c的 283行,在这里执行上步说的两个操作,并将该客户端在线状态设置为1.
3.3 当服务器端获得客户端退出的消息时,将该客户端在线状态设置为0,同时将该客户端从Memcached移除。参考代码loop.c的260行和275行。
3.4 当同一客户端登录的时候,参考代码read_handle_server.c的201行。
3.5 参考client/pub_client.c代码,实现一个独立的server端。
实现流程:
读取待发送数据->从memcached中读取在线用户->调用mosquitto_publish推送数据到客户端。
4 server段伪代码
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mosq = mosquitto_new(id, NULL);
mosquitto_will_set(mosq, true, will_topic, will_payloadlen, will_payload, will_qos, will_retain);
mosquitto_connect_callback_set(mosq, my_connect_callback);
mosquitto_disconnect_callback_set(mosq, my_disconnect_callback);
mosquitto_publish_callback_set(mosq, my_publish_callback);
rc = mosquitto_connect(mosq, host, port, keepalive, true);
MSG iMSGNum = GetMSG();
int iUserNum = GetUsers(list);
for(int i = 0 ; i < iUserNum ; i ++)
{
rc2 = mosquitto_publish(mosq, &mid_sent, topic, strlen(buf), (uint8_t *)buf, qos, retain);
}
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
5 测试例子
这里使用的是 优狐安卓推送端进行测试。
5.1 启动Android端的 优狐即时推送客户端,点击开启
5.2 我们可以看到这个topic为 tokudu/155935358
5.3 下载mosquitto的源代码。
5.4 解压后,make && make install
5.5 执行(这里要注意:出错)
mosquitto_pub: error while loading shared libraries: libmosquitto.so.0: cannot open shared object file: No such file or directory
这是由于目录是生成到/usr/local/lib目录了,应该拷贝到/usr/lib目录
ln -s /usr/local/lib/libmosquitto.so.0 /usr/lib/libmosquitto.so.0
mosquitto_pub -h familysguardian.com -p 9999 -m sssss -t tokudu/155935358 -d
5.6 在Android端可以看到发送的消息sssss了。
5.7 在Server的实现方面可以完全参考pub_client.c的代码例子。
6 参考文章
6.1 http://mosquitto.org/download/
6.2 http://mosquitto.org/
6.3 http://doandroid.info/%E5%9B%A2%E9%98%9F%E7%A7%BB%E5%8A%A8%E4%BA%92%E8%81%94%E7%BD%91%E4%BD%9C%E5%93%81%E5%8F%8Ademo/android%E5%8D%B3%E6%97%B6%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81%E5%B9%B3%E5%8F%B0demo/
6.4 http://familysguardian.com:8888/android_push/send.php
6.5 http://familysguardian.com:8888/android_push/index.php
6.6 http://doandroid.info/2012/03/19/android%E5%92%8Ciphone%E5%B9%B3%E5%8F%B0%E7%9A%84%E4%B8%80%E7%A7%8D%E9%9B%86%E7%BE%A4%E6%8E%A8%E9%80%81%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84/
-END-
- Mosquitto持久层群推消息实现思路
- 使用开源消息推送协议的实现-mosquitto
- vs2010 编译mosquitto win32版本,开启websockets,实现消息推送
- vs2010 编译mosquitto win32版本,开启websockets,实现消息推送
- mqtt消息推送-Mosquitto安装
- mosquitto
- mosquitto
- mosquitto
- ActiveMQ的消息持久化---JDBC的实现方式
- ActiveMQ发消息、收消息、持久化,查询队列剩余消息数、出队数的实现
- ActiveMQ发消息、收消息、持久化,查询队列剩余消息数、出队数的实现
- ActiveMQ发消息、收消息、持久化,查询队列剩余消息数、出队数的实现
- 个人开发者app消息推送简单实现思路
- 个人开发者app消息推送简单实现思路
- 前端实现消息侦听发送的一点小思路
- mysql消息队列/定时任务实现思路(一)
- ActiveMq持久化消息
- rabbitmq 消息持久化
- 时钟类练手
- String变量引起的Loadrunner资源泄漏
- Android的图片压缩类ThumbnailUtils
- 七夕,染红了我的相思
- 百度地图API详解和运用
- Mosquitto持久层群推消息实现思路
- ibatis 做批量操作(含事务)
- C语言常用排序全解
- mule3.X + spring3.X
- android view viewGroup 解析
- 我之理解Linux kernel[Process 一]
- OCP-043session_longops
- 百度地图API
- 网络上的等待事件。