首先声明一下。我写的这个ddpushWebManager 是我对ddpush的web推送写的一种解决方案。或者说是一种ddpush web推送的解决思路。
ddpush 官方 提供了一个java编写的开源的推送服务器。在使用的过程中有需要在网页上管理推送信息的这种需求。我就自己稍微琢磨了一下。就写了一个这个ddpushWebManager 我吧他放到了gitHub上了。
大家也可以在csdn上下载
http://download.csdn.net/detail/brok1n/
这个ddpushWebManager的作用就是让我们可以在网页上来管理推送信息、在网页上像ddpush服务器推送消息。然后ddpush服务器再将要推送的消息推送给客户端。
我这篇文章。主要是用来说一下我写的ddpushWebManager的工作流程、以及使用方式。不过我要在这里先简单的说一下ddpush的大致流程。
ddpush:
首先。ddpush提供了两种连接方式。UDP 和 TCP 官方说明。 UDP比TCP的同时连接数要多很多倍。所以推荐用UDP的方式。 ddpush是用来做推送的。所以说一下。首先ddpush服务器端建立UDP或者TCP服务器。 然后监听服务器的9966端口 UDP 和TCP都是使用这个端口。在这里也顺便说一下。电脑的端口。UDP有的端口、TCP也可有。所以UDP使用9966端口。TCP也可以使用9966端口。TCP的是监听、UDP的是绑定。 没怎么具体看资料。我这说的就是让大家明白。UDP 使用9966端口的同时TCP也可以使用9966端口。
ddpush服务器监听9966端口之后。客户端用对应的TCP或者UDP连接服务器的这个端口。服务器在收到一个客户端连接的时候。会创建一个客户端的虚拟对象。保存到一个集合里。这个对象里保存了这个对象的uuid(常规来说是md5加密的字符串) 还有这个客户端的网络地址、最后心跳时间、是否有消息需要推送给这个客户端等等一些属性。
具体可以查看org.ddpush.im.v1.node下的ClientStatMachine.java 这个类。 客户端链接之后。服务器根据这个客户端生成一个ClientStatMachine对象。保存在集合中。 这个集合就是所有连接过服务器的客户端对象集合。这个集合在正常关闭服务器的时候。会被保存到文件中。当ddpush服务器下次启动的时候。就会从文件中读取上次关闭服务器时。保存的客户端对象。
这样 客户端就和服务器端建立了连接、当然这个连接应为各种路由端口映射等问题。需要不时的发送或者接受数据、来告诉路由器这个连接正在使用。避免这个连接被释放。所以ddpush里有心跳机制。 也就是定时 从客户端向服务器端发送消息。如果在一段时间内。服务器没有收到客户端的心跳消息。那么服务器就会认为这个客户端掉线了。 ddpush默认的心跳时间应该是50秒。 大家可以按照自己的需要去修改。
然后我们开始说推送。 ddpush主要是用来从服务器向客户端推送消息。没有从客户端向服务器推送消息。也同时没有客户端向客户端推送消息。 如果有这方面的需要可以自行找解决办法。 当然我这样说。可能有人说 ddpush的客户端也向服务器发送消息。对!是这样的。ddpush的客户端也向服务器发送消息。
但是: ddpush的客户端向服务器发送的所有消息只有两种类型:
第一种是心跳消息
第二种是应答消息
好了以上就是ddpush的服务器像客户端推送一条消息的一半的过程。为什么说是一半的。应为我们还没有说 是谁让ddpush服务器向哪个客户端推送消息。下面来介绍一下 怎么告诉ddpush服务器 让ddpush服务器向某个(例如:) 用户推送消息
好了基本上ddpush就是这个流程。 同时说一下。ddpush 只能推送最后一条消息给客户端。也就是说ddpush没有推送消息列表 当一条消息被发送到ddpush中 ddpush服务器发送给客户端 如果客户端此时不在线。则肯定是收不到这条推送消息。然后当有第二条消息需要推送给这个用户的时候。 ddpush会抛弃第一个客户端并没有接收到的推送消息。然后开始推送第二条消息。 如果第二条消息客户端也没有收到。并且这时候有第三条或者更多的推送消息需要推送给这个客户端。则ddpush只会保留最后一条推送消息 在这个客户端下次上线的时候 推送给这个客户端。
说了这么多。以上就是ddpush的基本流程。
让我们知道了。如果想要在网页上推送消息需要有一些条件。
因为我们知道在网页上做一些操作。如果想发送到其他地方。仅有几种方式。
第一种 网页中去请求其他的网页。其他动态网站程序
第二种 网页中将数据保存到文件里。
第三种 网页中将数据保存到数据库里。
。。。 其他的我就不说了。
通过上面的了解 我们知道想向ddpush发布推送任务请求。的唯一途径就是使用Pusher.java 或者说唯一途径就是使用TCP 连接到ddpush的9999端口 然后发送推送任务消息包。 我们在网站上 目前就我知道的来讲 在网页上和其他地方建立TCP连接比较麻烦。或者有些无法完成。所以直接在网页上连接ddpush服务器发送推送消息这个首先抛弃。
然后我们来看 将要推送的消息保存在数据库中。 这个和将要推送的消息保存在文件中。这两个都可以 让ddpush知道我要推送什么消息。比如 做一个程序 定时检测数据库或者文件 发现新的推送任务 就取出 然后用TCP连接ddpush将这个要推送的消息发送出去。这样可以实现。但是我也放弃了。应为我感觉这不是一个好的方式。
然后再看看。网页中去请求其他网页。 这个是在网页中比较常见的一种方式。 有了这个目标。我们就来看。如何让我们在网页中请求其他网页 这个被请求的网页知道我们要推送个ddpush服务器消息。并且这个网页可以和ddpush建立TCP连接。 然后我想到了javaweb jsp做法。但是我感觉这样也比较麻烦。应为还得弄tomcat java的网站环境。而且tomcat是给大、多 客户端提送的http服务器。我们这个客户端很少。只有基本上就一个web管理服务器去连接。 所以用tomcat来做。或者用其他的一些HTTP服务器来做就有点 大材小用 而且耗费系统资源。 然后我就想到了自己写一个HTTP服务器。因为这在我看来是比较简单、小巧的方式。在以往的编程、学习 中我知道HTTP内部也就是用的TCP方式。我用java打印过一个HTTP请求的输入流中的所有数据。基本上知道HTTP请求 响应数据包的大概内容。于是我就开始动工。自己写一个简单的HTTP服务器。 当然写这个我没有参考什么书籍 直接就写。 直接就写在我用java写HTTP服务器的时候。结尾遇到一个小问题。就是给客户端响应数据的时候。发现我用浏览器收不到响应数据。 然后我到网上找了一下资料。然后就搞定了。
这是我写ddpushWebManager的最重要的一个东西的大概过程。
好了下面说一下我写的ddpushWebManager

讯享网

这是运行的三张截图。我在网页中向我的手机客户端发送了自定义消息。 然后手机收到了自定义消息。
然后我们来说一下。我写的这个项目的东西。
ddpushWebManager 里有两个项目:
HttpPushServer 这就是一个简单的HTTP服务器。用java写的
ddpushWebManager 这是推送的网站后台管理用php做的
就这两个东西。
HttpPushServer 是一个常规的Eclipse项目。下载下来导入即可。
ddpushWebManager是php项目。放到你的网站里任意位置都可以。 只要能正常访问。
下载下来学习、测试的话就建立一个本地的PHP开发环境。然后把ddpushWebManager丢到本地的PHP网站目录下就可以了。
上面说了 ddpush只能接受TCP连接发布的推送任务。所以我这里就在HttpPushServer里写的 我的HTTP服务器接收到了客户端请求。然后简单判断一下请求是否合法。然后就分析要推送什么任务。 然后创建Pusher对象 然后推送。
ddpushWabManager的php我也是略知一二。不是专业的就找了一下smarty 写写。
大家在我项目里看到我有写错的地方。欢迎指出。留言或者发Email告诉我。我会及时修正。谢谢。
我Email: @.com
上面说了我这个ddpush的大体流程。也说了我这个项目的大体流程。相信大家都有一个大概的了解了吧。
下面来说说我这个项目的用法。(记得使用前你的从github上下载我这个项目)
首先:你的架设好ddpush服务器。还有客户端。先调试好ddpush和客户端的正常推送消息。 这里ddpush客户端我们给他分配的id是10001 这个数字在客户端会被MD5加密之后就变成uuid 然后把这个uuid传递给ddpush服务器 来标识这个用户
然后 导入我项目里的 HttpPushServer 这个eclipse项目。修改src下的 httppush.properties 这个配置文件
HTTP_PUSH_PORT=8888 是我们在网页**问我们的HTTP服务器的端口号。应为考虑到服务器上可能会有其他的网站神马的。所以我们加一个自己定义的HTTP端口。我们在访问的时候我们的HTTP服务器的接口的时候。记得要加上端口号哦。我这里默认写的是 8888 大家看需求 没必要就不用改了。

HTTP_PUSH_SERVER_IP=192.168.1.107 这个就是我们在网页**问HTTP服务器的ip地址。 常规的网站可以两种方式访问 一种是域名访问 一种就是直接输入IP地址来访问。我们这里直接用IP地址来访问。
DDPUSH_PUSH_SERVER_IP=192.168.1.107 这个是ddpush服务器的IP地址。因为我们要向ddpush发送推送任务
DDPUSH_PUSH_SERVER_PORT=9999 这个就是ddpush的发布推送任务接口的端口号。 对应ddpush中的 PUSH_LISTENER_PORT=9999 这个。 大家再用的时候需要把 httppush.properties 里的 DDPUSH_PUSH_SERVER_PORT的值 修改成和 ddpush 的 ddpush.properties 里的 PUSH_LISTENER_PORT 值一样。
CONNECT_DDPUSHPUSH_SERVER_TIMEOUT=5000 这个事TCP链接超时时间。基本上不用去修改。
然后我们运行 HttpPushServer 的 com.skywds.java/HttpPushServer.java
然后我们就可以来弄ddpushWebManager了。
由于这是个php项目。所以我们需要搭建好php环境。我们把ddpushWebManager放到我的本地php环境的网站目录下。我们打开浏览器访问

注意一下 放的路径。
然后我这里用的是一个后台UI框架。 这个后踢UI框架是开源免费的。
账号: admin
密码: admin
验证码输入一下。然后点击 登陆 出来个登陆成功 点击确定 进入后台界面

然后我们在左侧的 用户中心 用户管理 界面 点击 添加用户按钮 添加一个用户

然后我们来推送消息 打开左侧的 推送管理 推送管理 页面


然后点击ID为 10001 这条数据的右侧的 绿色的 推送消息 按钮。就会出现一个推送界面。
下面是几个推送任务成功提示




以上。就是大概的使用。应为ddpushWebManager 是请求一个http接口然后发送推送消息的。所以有个地方可以修改网页请求的http接口地址。
在ddpushWebManager中的push.php中
pusUrl = 'http://192.168.1.105:8888/?act=user&type='.type.’&uuid=’.uuid.'&data='.data.’&ticket=35as1df35a1sdf5a1sdf35’;
这里面的 192.168.1.105 修改成你配置 HttpPushServer 这个HTTP 服务器的ip地址。
我这里电脑ip是192.168.1.105 我吧ddpush配置在了这台电脑上。还有HttpPushServer 也配置在了这个电脑上。所以我修改了HttpPushServer的配置文件将里面的两个ip地址都改成 192.168.1.105 同时将 ddpushWebManager里的 push.php 文件的
pusUrl = 'http://192.168.1.105:8888/?act=user&type='.type.’&uuid=’.uuid.'&data='.data.’&ticket=35as1df35a1sdf5a1sdf35’;
这里的IP地址也修改成了 192.168.1.105
好了。到现在基本上我这个项目你应该可以正常的运行了。服务器发送消息 网页上发送消息 客户端也能够正常的收到推送消息了。
HttpPushServer的控制台会打印收到的ddpushWebManager提交的推送请求消息。 记得一定要将IP修改正确。
基本上就是这样了。这个文章似乎有点长了。 大家有需要的就看。
突然发现这个文章写了好几个小时。。。。
来继续 该结尾了。
我这个项目。目的是提供一个思路或者是一个大致上的解决方案。代码写的很随意。大家主要是了解我这个写的思路。然后自己修改。或者自己写一个也行。或者在我这个项目上修改也行。 同时说明一下。我这个ddpushWebManager没有提供用户管理存储数据库的功能。我就是大概的实现这个功能。把所有数据都存到session里去了。大家可以看看ddpushWebManager 的php代码。也就十几个php文件。很简单。 一定要先看完我这篇文章。了解了我的大体思路 然后再去看代码。会明白的很快。
恩恩。基本上就是这些了。这篇超长的文章。到此结束。有任何疑问、意见、建议。欢迎大家回复。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/55233.html