Direct Push---甚好甚强巨

Direct Push---甚好甚强巨

摘要:Push Mail的业务在国内业已渐渐活跃起来,Exchange Server和智能手机PDA的普及程度也从很大程度上反映了企业(公司)的信息化水平。本文阐述了Direct Push实现条件,实现机制,heartbeat校正的过程和防火墙配置的相关内容。Keywords
Direct Push, Exchange Server 2007, Email

大概1个月以前,和Bob Li聊到了一些有关Direct Push的原理性的问题,当时承诺要写一篇有关Push e-mail的东西,可惜前一段实在太忙,每天上网时间有限,一直拖到现在才得以稍稍解脱。希望大家多多指正和交流。

Background

Push是相对Pull来说的,传统的Email实际上就是一种Pull的方式,主动权在用户,用户在他们登陆邮箱的时候,会询问邮件服务器是否有新的邮件,如果有新的邮件,用户端会去查收(下载)新的Email至收件箱。可以这么认为:

Pull==User Request + Server Push

不过,既然邮件本身就是从发件方到收件方的讯息,为什么不能像短消息(SMS)一样直接Push给用户呢?其实这也就是传统的Pull方式存在的意义:

客户端是灵活的

邮件服务器存在的一个必要性就是它总是连接到网络的,而用户是随机接入的。邮件服务器不可能也不必要给用户定址,因为用户只是偶尔接入而且可能每次接入的网络都不一样。当新的邮件到达的时候,邮件服务器无法确定新的邮件应该被派送到哪个地址。所以只能是以用户主动请求。常见的Post Office Protocol(POP3),就是这样一种基于Pull方式的邮件协议。

而Internet Message Access Protocol (IMAP)则提供了对邮件提醒(询问)功能的支持,当邮件客户端收到一个来自Server的提醒时,它可以选择是否去Server获取新数据。能够选择是否获取新邮件,这是IMAP的一个主要特性。这种方式显然要比纯Pull的系统要灵活一些。不过另一方面,这种带提醒的消息方式无疑增加了往返的交互次数,这稍稍显得有些繁琐。

下面该谈谈本文的主角了---Direct Push

Direct Push是Exchange Server 2007中内建的一个特征。它是用来使移动设备通过运营商的蜂窝网络连接,与特定的Server保持一个总是更新着(Always-Up-To-Date)的状态。

Tips事实上在Exchange Server 2003 SP2的时候就引入了Direct Push的概念:可以参考http://msdn2.microsoft.com/en-us/library/aa446486.aspx

Direct Push引入了一个主动提醒的机制,你可以称它为“主动的IMAP”J,这种机制使得每当有新的内容待同步到设备上的时候,设备会收到一个提示(信息)。

Direct Push的条件

1) 移动设备

首先,你的移动设备必须是支持Direct Push的,一般来说OEM会把这点明显强调一些。比如我的i718开机的时候会有一个“Direct Push Technology”的Logo。这种支持说得详细一些就是要满足以下条件之一

Ø         一台具有电话功能并带有Messaging & Security Feature Pack (MSFP)的Windows Mobile 5.0设备(当然更高版本的亦可)。

Ø         一台具有电话功能,由Microsoft Exchange ActiveSync授权并专为兼容Direct Push而设计的移动设备(不一定是Windows Mobile的设备)。

2)服务器

Exchange Server 2007

Direct Push概述

下面来看看一个典型的Push Mail的工作过程是怎样的。默认情况下,Direct Push在Exchange2007中是被启用的。那些支持Direct Push的移动设备向Exchange Server发起一个HTTPS的长连接请求。同时,Exchange Server对它的用户们的邮箱活动进行监视,并能够在邮箱状态变化的时候给移动设备发送一个回应。

这里说的“邮箱状态变化”的范围是很广的,可能是新邮件到来,可能是删除了邮件,也可能是日程表或者联系人的任何变化。

如果这样一些改变发生在那个HTTPS长连接请求的生命周期内,Exchange Server会立即发起一个回应给用户的移动终端,提醒该移动设备有了新的变化,须要重新同步移动设备到Exchange Server以获取更新的信息,然后移动设备会发起一个同步的请求给server。同步完成以后,一条新的长连接HTTPS的请求又会生成,如此反复。这样反复的请求,保证了用户的Email,日历,联系人和任务等信息都会相对及时地被Push到Mobile设备,使得用户即便不在PC机前也可以与Exchange server保持一个同步更新的状态。

Direct Push 拓扑结构

图2描述了一个典型的Exchange Server 2007为Direct Push配置的拓扑结构。

2 Direct Push的网络模型

下面我们对照图2来看看Direct Push的运作方式:

1)     一台已经配置为与某Exchange Server 2007同步的移动设备发起一个HTTPS的请求给服务器。这个请求就是我们通常所说的Ping。这个请求告诉服务器,请它在接下来的15分钟内,当邮件服务器上用户的任何文件夹发生任何改变的时候给我们的移送设备发送一个提醒。接下来的时间我们的移动设备就处于待命状态,等待消息。这里的15分钟的间隔,就是所谓的心跳(heartbeat)间隔。

2)     如果在这15分钟内,没有任何条目发生改变,服务器会返回一个HTTP 200的ok消息。我们的移动设备收到这个消息,返回到活动状态,并重新发起请求。

3)     在15分钟的heartbeat中,如果有任何改变或者收到新的条目,服务器会发送一个响应通知移动设备有新邮件或者邮箱的某些条目改变了,并告诉移动设备发生改变的文件夹的名字。移动设备收到这条消息之后,它会发起一个与有变动的文件夹同步的请求,与服务器上的更新内容同步。在同步完成的时候,移动设备又会发起一个新的ping请求,于是又开始一段新的heartbeat。

Direct Push的校正机制

Direct Push依赖于一个支持HTTPS长连接的网络环境。如果移动设备的网络或者防火墙不支持长连接的HTTPS请求会怎么办呢?下面来看看Direct Push在传输网络超时时间小于heartbeat时间的情况下是如何工作的:

(我们先假设移动设备所在网络超时时间为13分钟)

1)     移动设备发起一个HTTPS的长连接请求给服务器。希望在接下来的15分钟内,邮件服务器上用户的文件夹有任何变化的时候能得到一个提醒。如果没有变化,服务器就应返回一个HTTP 200的OK消息,这一步跟前面是完全一样的。

2)     如果在这15分钟内,服务器没有任何回应给移动设备,移动设备会推断出可能是到服务器的连接超时了。它会重新发起一个HTTPS的请求,但是这一次它会使用一个只有8分钟的heartbeat的请求。

3)     8分钟之后,服务器发送一个HTTP 200 OK的消息。然后设备又会尝试发起一个更长些(12分钟)的HTTPS请求给服务器。

4)     如果在这12分钟的时间内,收到了一条新的邮件,服务器会发送给移动设备一个提醒,提示有新内容待同步了。然后,设备会与服务器进行同步,并重新发起这个12分钟的请求。

5)     如果在12分钟后,没有收到任何新的或者变化的内容,服务器会回复一个HTTP 200的OK消息。然后设备会推断出当前的网络状况是支持12分钟heartbeat的,它会继续尝试使用更长(16分钟)的连接。

6)     16分钟后,又没有任何回应了。这时,移动设备会推断出当前的网络不支持16分钟的heartbeat。因为这次超时发生在设备尝试增加heartbeat间隔之后,移送设备知道已经达到了当前网络的最大超时间隔,设备不会又减少间隔时间来重复操作,而是会取上一次成功的heartbeat时间(12分钟),重新发起12分钟的heartbeat。

总而言之,移动设备保存了它的Ping请求的日志,它会以某种算法尝试使用允许的最长的heartbeat间隔来发起连接请求。这一方面增加了待机时间(每一个请求后,如果用户没有其他的操作设备会挂起),一方面减少了网络流量。

心跳连接的时间可以在移动设备的注册表中找到

配置跨越防火墙工作的Direct Push

几乎没有哪个企业的内部网是直接接入到Internet的,通常都会有一台服务器充当着防火墙的角色。为了让Direct Push的工作不受防火墙的阻挠,你必须先打开TCP 端口 443,这是SSL的需要。必须保证在用户访问服务器和internet之间该端口是打开的。

除了在防火墙打开必要的端口之外,为了提高Direct Push的性能,应当增加防火墙超时时间值,如果防火墙关闭会话(Session),邮件就不会被投递出去,直到下一次连接。所以防火墙会话(Session)时间应当被设置为比运营商的网络空闲超时时间隔大一些的范围。一般在15到30分钟之间。从前面的分析我们可以得知,很显然,越短的超时时间会导致移动设备更加频繁的连接请求,这会降低待机时间,增加网络流量。关于配置防火墙的更多信息,请参考ISA Server Product Documentation

推荐资源

Ø         Microsoft Exchange Team

Ø         Microsoft Direct Push Homepage

Ø         Heartbeat Interval Adjustment

黄季冬<fox23>

hjd.click AT gmail.com

2008年5月17日

posted on 2008-05-17 22:32 Freesc Huang 阅读(3017) 评论(19) 编辑 收藏

评论

#1楼 2008-05-17 22:32 lbq1221119      

first blood 呵呵  回复 引用 查看   

#2楼[楼主] 2008-05-17 22:33 fox23      

@lbq1221119
您也太快了吧!!! :)
 回复 引用 查看   

#3楼 2008-05-17 22:35 lbq1221119      

@fox23
呵呵 那是,我一向以顶贴的速度和质量著称
fb可不是白拿的

我看你对windows mobile挺有研究的 啊哈
 回复 引用 查看   

#4楼 2008-05-17 22:41 Yannic Yang      

呵呵 一直在用……
哪天拿手机过来给你开个帐号
 回复 引用 查看   

#5楼[楼主] 2008-05-17 22:53 fox23      

@Yannic Yang
账号密码我又忘了...
 回复 引用 查看   

#6楼 2008-05-17 23:19 黎波      

不错:)
帮大家揭开了这个疑惑!
 回复 引用 查看   

#7楼[楼主] 2008-05-17 23:29 fox23      

@黎波
这么客气...
 回复 引用 查看   

#8楼 2008-05-17 23:56 王孟军!      


@fox23
你好
我准备做MOBILE开发,多指教
 回复 引用 查看   

#9楼[楼主] 2008-05-18 00:03 fox23      

@王孟军!
多交流,欢迎常来
 回复 引用 查看   

#10楼 2008-05-18 01:27 皇帝的新装      

好多新名词啊  回复 引用 查看   

#11楼[楼主] 2008-05-18 02:32 fox23      

@皇帝的新装
厄,比如说呢?
 回复 引用 查看   

#12楼 2008-05-18 10:16 Yannic Yang

这东西最麻烦的还是网络问题……有wifi同步还好,不过范围小了,在外面他自动用gprs同步那个流量不小。速度也慢,还是等3g或者4g吧……  回复 引用   

#13楼 2008-05-18 19:39 airwolf2026      

好文章.呵呵.了解新东西...特别是心跳间隔判断那个.哈哈  回复 引用 查看   

#14楼[楼主] 2008-05-18 20:38 fox23      

@airwolf2026
最后推荐的第三个链接值得一看
 回复 引用 查看   

#15楼 2008-05-19 09:14 Allen Lee      

好东西,谢谢分享。  回复 引用 查看   

#16楼[楼主] 2008-05-19 21:28 fox23      

@Allen Lee
多多交流 :)
 回复 引用 查看   

#17楼 2009-02-11 15:35 54powerman[未注册用户]

不是真正意义上的PushMail,如果长连接的话,这种push有何益?和pull没区别,定时pull就是了。
请指教。
 回复 引用   

#18楼 2009-12-21 13:40 egmkang      

像是Always Pull,费电  回复 引用 查看   

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

These postings are provided "AS IS" with no warranties
and confer no rights.


Locations of visitors to this page

Blog Keywords
Embedded System,Visual Studio,.Net Framework,.Net Compact Framework,.Net Micro Framework,Windows Mobile,Windows Embedded CE,Emulator,WCF,CLR,Design & Pattern,C/C++,C#,Matlab,Algorithms
昵称:Freesc Huang
园龄:4年11个月
粉丝:32
关注:4

统计

  • 随笔 - 197
  • 文章 - 0
  • 评论 - 840

搜索

 

随笔分类(227)

随笔档案(197)

Blogs

Link

积分与排名

最新评论

阅读排行榜

评论排行榜

推荐排行榜