目前项目与即插即用有关,以alljoyn为底层支撑,以VS为开发环境,以Mongodb为数据库而实现的。目前实现的功能有:
1、系统以多对一方式运行,多个客户端,一个服务端
2、服务端可定期收集客户端的描述信息,包括客户端有哪些资源,在哪里等等
3、当有设备加入或离开时,服务端可以立即了解到
4、描述信息以JSON格式写入Mongodb数据库,可供上层应用获取利用
5、目前平台仅涉及PC和arduino due(arduino平台我暂未负责)
存在的问题有:
1、当多个地方开启同名服务时,客户只识别其中一个,如何判断?
2、随着客户端的增多,加入会话的时间会相应延长,怎样解决?
3、当有2个或2个以上的客户端启动时,CPU占用率高达90%
目前成果图文说明
1、准备阶段
配置好mongodb数据库,启动mongo客户端以方便观察数据库变化;准备好服务端与客户端的执行文件及相应的配置xml文件;设置好boost和mongoclient动态库路径,运行时需要
2、启动服务端程序和数据库客户端mongo
上图表明连接数据库成功,且正在等待接收客户会话请求。服务名是:org.alljoyn.service.test
已经连上mongodb服务端
3、启动第一个客户端实例
由上图可知客户寻找服务成功,加入会话。接下来收到服务发送的命令,该命令要求客户发送自己的描述信息,于是客户开始发送描述信息,发完后继续等待接收命令
客户一启动,服务端的反应是:
接受了客户的连接请求。设备一加入,就立刻发送获取描述信息命令。上图显示了两次命令发送,所以收到了两次描述信息,并将之写入数据库。目前此描述信息只是模板,后期需要调整。这里将信息以JSON格式打印出来以方便展示
此时我们可观察数据库是否有无添加。预先已经在service.xml文件中设置好数据库名alljoyn,集合名为clientdesc,见下图:
由图可知描述信息已经写入了数据库。其中由于编码问题,导致中文的乱码。当然这不是重点,毕竟已经成功写入了数据库。此后关于此客户的信息会定期由服务端发送命令面更新。
4、启动第二个客户端实例
客户反应如上,服务端也能立刻识别,见下图:
立刻识别出了新增的客户:XwpuCV6U.2,数据库的数量从1变成了2.此时再查看数据库:
已经多增加了一条记录
5、断开一个客户端
比如随便断开一个客户端,服务能否立刻感知到呢?可以
服务端检测到有客户退出。当然此时数据库也少了一项
大概就是如此。当然,还有很多不足,可能最让人困惑的是这东西能干啥。用在PC上确实感觉不到,不过用在嵌入式终端上就会有它的好处了,目前还需继续探讨。