项目设计中使用了openfire服务器。根据需求,需要满足多个手机客户端同时使用一个账号登录,这样以来可以满足对应的管理账号有消息时,多个手机客户端均可收到。简单的数据流程图如下:
手机端账号:C@domain
管理端账号:G@domain/G
上行数据:
C@domain/xxx -> openfire -> G@domain/G
C@domain/yyy -> openfire -> G@domain/G
下行数据:
| -> C@domain/xxx G@domain/G -> openfire | | -> C@domain/yyy
其中资源名xxx和yyy可以使用手机客户端的时间生成。
在网络上看到大多数文章讲到在openfire服务器中设置route.all-resources=true即可。而在测试中发现如果只设置这个,那多个客户端使用同一个账号是可以同时登录,但G@domain/G发送来的消息只能转发到最后一个登录
的客户端上。搜索中看到了这个文章https://community.igniterealtime.org/thread/43605,于是将客户端的优先级设置为一样,然后在管理端发送消息时,不指定资源即可。
这样所有客户端就都可以收到消息了。