一、DDPush推送:
1、原理:
详见http://yt0116.blog.51cto.com/9221014/1688096
2、特点:
(1)只能实现个推,如果要推送多个人的话,就使用循环进行控制
(2)实现简单推送,但是可以自定义推送格式和内容,有通用推送、分类推送、自定义推送三种格式,比较灵活。
(3)DDPush是基于Socket编程的原理,使用UDP协议进行控制的。服务器端监听客户端信息并进行通信。
3、配置:见DDPush官网
4、疑问:
(1)uuid与客户端是怎么对应的?
在DDPush源代码中,服务器在收到一个客户端连接的时候。会创建一个客户端的虚拟对象。保存到一个集合里。这个对象里保存了这个对象的uuid(常规来说是md5加密的字符串) 还有这个客户端的网络地址、最后心跳时间、是否有消息需要推送给这个客户端等等一些属性。所以可以根据uuid去发送给相应的客户信息。
(2)DDPush服务器怎么知道要给谁推送信息?
向ddpush服务器发送推送任务的是org.ddpush.im.v1.client.appserver里面的 Pusher.java 这个类。 里面提供了几种方式 推送0x10消息 推送0x11消息 推送0x20消息 也就是说我们需要用Pusher.java 来告诉ddpush服务器 我要给100001这个用户推送一条 0x10 这种消息 然后ddpush服务器接受到了这个任务。就从 客户端虚拟客户端对象集合中查找这个用户。如果这个用户没有查找到。就根据这条推送消息来创建一个虚拟的用户对象 并存放到虚拟客户端对象集合中 当这个用户登录ddpush服务器之后 ddpush发现服务器已经存在了这个用户。就从虚拟客户端对象集合中把这个用户取出。然后修改这个客户端对象的属性。 同时发现在虚拟客户端对象中有一条需要推送的消息。于是就立即把这条消息推送给这个刚上线的客户端。
(3)UDP端口和服务器端口的作用与区别?
UDP端口:9966
ddpush服务器监听9966端口之后。客户端用对应的TCP或者UDP连接服务器的这个端口。服务器在收到一个客户端连接的时候。会创建一个客户端的虚拟对象。此对象会对uuid和客户机的网络id进行封装。
服务器端口:9999
ddpush在启动的时候 同时启动了一个接受推送任务的服务器 这个服务器监听9999端口。 然后 在有要推送的任务的时候。我们创建Pusher.java 这个类的对象。在这个类中。就是连接到ddpush服务器的9999端口。然后 向ddpush发送相对应的数据包。然后ddpush接受到了这个推送任务数据包。检查数据包格式、判断推送任务类型。
简单的理解就是UDP端口用以监听和获取客户端信息,DDPUsh服务器端口用以把信息推送到相应的uuid上。
(4)怎么设置uuid?使用推送时每一个用户都需要填写uuid吗?
我们知道,DDPush给我们提供了客户机端的实例,需要注册一下uuid,以便服务器给该客户机发送信息,那么,在实际开发中,每一个客户只要装这个软件,都要注册一下吗,那么重复的怎么办?其实,实际上并不是这样,每一个用户进行注册时,可以把自己的id号当做uuid,既保证了唯一性,还比较方便。
二、友盟推送:
1、原理:可以了解一下第三方推送。
2、特点:
(1)既能实现个推,还能实现单播、广播、组播,可以根据用户不同的特点进行推送信息。
(2)推送形式多样,也很灵活。既能推送通知,还能推送消息。
3、配置:(链接)http://bbs.umeng.com/thread-7067-1-1.html
(详见官方文档进行配置)
4、疑问:
(1)怎么实现个推?
可以根据设置的alias和alias_Type进行推送,也可以使用Devide_Token进行实现。设置alias和alias_Type时,友盟后台服务器会与Devide_Token进行绑定,这两者的实质是一样的。
(2)推送的原理
因为是第三方推送的原因,实际上推送信息的过程是友盟后台服务器做到的。在本地,实际上就是调用了后台服务器中的方法。
(3)服务器白名单配置
在申请应用时,需要填写对应服务器的ip,实际上该ip主要是过滤相应的服务器。如果不是白名单里面的ip,推送会无效。该IP必须是固定IP,而且是外网可以访问的ip地址。
三、DDPush与友盟推送的对比:
(1)友盟推送属于第三方推送,有一定的依赖性。但是功能比较强大。
而DDPush不属于第三方推送,DDPush服务器可以直接部署在自己的服务器所在的电脑上。
(2)推送方式与范围
四、学习收获
1、误区:
对TCP和IP协议的理解模糊。
更正:两个独立的概念,不能混为一谈。IP协议是TCP的底部协议,如果需要理解TCP协议中关于IP的详细内容,可以查看IP协议。
2、网络知识的总结
(1)把局域网IP配置成固定IP
http://jingyan.baidu.com/article/5553fa82e368c565a239348e.html
(2)局域网固定IP一定会被外网访问吗
在这里,我们先梳理两个概念,外网和内网:
内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网IP可以有相同的。
外网:即互联网,局域网通过一台服务器或是一个路由器对外连接的网络,这个IP地址是惟一的。也就是说内网里所有的计算机都是连接到这一个外网IP上,通过这一个外网IP对外进行交换数据的。也就是说,一个局域网里所有电脑的内网IP是互不相同的,但共用一个外网IP。(用ipconfig/all查到的IP是你本机的内网IP;在www.ip138.com上看到的是你连接互联网所使用的IP,即外网)。详细了解推荐:http://blog.csdn.net/wang379275614/article/details/7856281
那么就算把局域网中的ip改为固定ip,外网也依然不会访问的到。那么如果需要外网访问的话,就需要做外网与内网的映射。可以使用nat123做外网与内网的端口映射,可以使用外部域名访问本地ip。或者就是在路由器上进行NAT映射,配置服务器固定ip,外网能够访问。详见:http://www.webkaka.com/info/archives/knowledge/2010/10/03496/