超哥会议管理系统
超哥会议管理系统
一、需求
现在的公司可能会开很多的会议,大大小小的会议非常的多,开会的话要通知公司里的人,通知的方法有:第一种可以是email,但是发email有些即时的信息有可能没法及时的看到,发短信的话,不仅麻烦还要花费很大的成本,现在可以设计这样的应用,因为现在大多数公司里都有自己的wifi,这样就可以在公司员工在这个wifi范围内就可以让手机自动的开启这个应用。假如说我们公司有会议,就可以在服务端发布咱们会议的会议时间和会议信息,那么咱们员工的手机端就会马上收到这个类似于收到短信一样的信息。而且还可以把会议中的文本或者图片下载出来看。
这里面的重要的技术点就是:当服务器端发布会议的时候,我们客户端如何收到通知。
这里常用的做法有两种,
一种是轮询,每个30秒或一分钟到服务器端请求信息,看看是否有新的会议,还有一种是socket的长连接消息推送。现在市面上大部分聊天软件为了先实现功能使用的是轮询方法,但是使用轮询方法对于用户来讲非常费电,消耗资源大。
二.服务端和客户端
服务端:
新建会议页面使用jsp写,使用post提交,页面中内容有会议编号,会议名称,会议时间,会议主管,会议人员,需下载的文件等。在添加会议的servlet中的post方法中,定义一个Map集合来存放会议的各个属性值,再定义一个list来存放会议文件的路径信息,然后就是文件上传的方法(这个方法当时用的是别人给的代码,不用去记具体的实现细节,只要我在工作中用到了,直接就能够拿过来用),创建会议,并导入数据库,当时用的是dbcp连接池,关于数据库处理的一些类不需要记,工作中遇到了直接拿来用就好。
客户端:
创建应用程序类,继承Application,这个类中放的是应用的设置信息,缓存信息,一些临时变量,我们可以在我们的activity中使用这里的临时变量,只需在activity中getApplication,在使用它的临时变量即可。这个方法,可以实现两个activity间进行数据传输,也就是把这个Application子类当成是一个静态类,我们在第二个activity中也直接getApplication使用它的对象就可以了。
定义一个框架层activity,BaseActivity,在这个类中,定义一些所有页面共有的元素。比如一些常用的对话框,进度条,数据库操作工具等等,
在登陆类中响应登陆按钮,检测登陆并处理数据。
网络通讯采用的是Http协议,客户端以post的方式向服务器端发送参数,服务器端向客户端返回xml格式的数据,使用HttpClient联网.
三.消息推送
推送的目的是让客户端能及时的获取到服务器端的通知,第一种方式发短信,最简单但最浪费钱,第二种是轮询,每隔几十秒查一下服务器,但是这种方法对资源的消耗和效率都不好,特别是那种一天只会有一两条信息的应用。还有一种就是消息推送了,推送的还有选择,看我们使用自己的服务器还是用第三方的服务器,这两种各有好处,如果是一个小公司,建议使用第三方的,这样做比较简单,国内有几个消息推送的提供商,百度推送、极光推送,这些推送基本上都能满足我们的需求,而且前期的成本会降低,能够很快实现这个功能,但是使用第三方的毕竟受制于人,当我们的用户超过10万百万的时候,肯定会收费的。
如果自己做服务器的话,使用最多的是xmpp,因为他是个开源的项目,每个人都可以使用,而且支持他的服务器也很多,比如说用于聊天的openfire服务器,还有用于推送功能的androidpn服务器,我是用到的就是androidpn这个开源服务器。
首先要把androidpn的服务器打开,执行里面的run.bat文件,然后在浏览器打开http://127.0.0.1.7070。
然后再把它的客户端运行起来,然后我们浏览器页面中的sessions模块就会显示有一个用户登录了,这时候就可以在Notifications模块里推送信息了。当我们推送一个时,客户端就立即会收到一个信息。
为什么服务器端发送一个信息,客户端就能够马上受到呢?
它的原理是socket长连接,http协议是短连接,底层都是socket连接。
为了让连接一直存在,这里引用了一个叫行跳帧的机制,就是当服务器端和客户端建立了连接了以后,为了维持这个连接的存在,每隔一段时间相互之间就会发送一个简短的数据,来验证这个连接是否存在,同时告诉网管,这个连接仍然存在,不能断掉,这个相隔的时间是动态的,只要服务器端和客户端有这个连接存在,随时都可以向客户端发送信息,客户端收到信息以后,立刻就会做出一些反应,这就是长连接机制的原理。
使用长连接比轮询好的地方就是他消耗的资源少,创建一个socket是很好资源的,但是socket创建好之后发送数据是很容易的,我们在做开发的时候,联网的次数要尽可能的少,每次传输的数据要多一些,这也是联网这一块优化的方向。
如何将消息推送这个功能移植到我们的应用程序里面?
我分析了androidpn客户端里的demo,在activity里开启一个service,在这个后台服务中维持着这个连接,也是在这里。
androidpn实现推送的原理,他在底层的service里维持着长连接,当服务器端有信息发送过来的时候,他对信息进行一些加工,然后发一个广播,然后广播接收者接收到这个广播的时候,再对数据进行一些处理,然后在notify的时候添加自己的功能。
发表评论 取消回复