面向卫星链路的电子邮件传送方法与系统的制作方法_2

文档序号:8945666阅读:来源:国知局
节点的缓存具有一个失效时间invalidTime,当文件已存放在缓存中的时间超过invalidTime时,邮件客户端将该文件从缓存中删除。
[0032]邮件服务器维护一个全局子件映射表,存放各个子件在网络中存储的缓存节点的IP列表。该表的key为子件的文件名,每个表项是一个链表,各链表项有2个属性:ip(即存有该子件的缓存节点的IP)和timestamp (即缓存有效时间戳)。由于邮件服务器缓存所有接收的子件,则无失效时间,所有每个表项的链表中至少一个链表项:〈服务器ip, Infinity)ο服务器定期将各全局子件映射表中timestamp值早于当前时间的链表项删除。
[0033]邮件服务器维护一个已查询节点映射表,存放某个节点在接收某个子件的过程中,已经从服务器取得的缓存节点的IP列表。该表的key为一个2元组〈子件的文件名,接收节点IP>,每个key有一个时间戳属性timestamp,存放该查询记录的失效时间。每个表项是一个链表,各链表项有I个属性:ip,即已查询过的缓存节点的IP。服务器定期将已查询节点映射表中timestamp早于当前时间的表项删除。
[0034]本发明中,邮件客户端发送邮件的主流程如图3A所示。步骤201处理邮件体,分离尺寸较大的段体,并生成包括所有被分离出的子件文件名的列表compFileList。步骤202将compFileList中的所有子件放入节点自己的文件缓存区。步骤203客户端使用SMTP协议发送处理后的邮件源码。步骤204客户端使用专用协议发送compFileList的所有子件。步骤201的详细实现的流程图如图3B所示。
[0035]步骤2011从前到后分析邮件源码中的邮件体部分,寻找以boundary字符串行来判断是否存在下一个邮件内容段。即查找以“------=_NeXtPart_”开头的行,同时下一行以“Content-Type:”开头。若不存在,则结束处理。否则,步骤2012再判断该段是否满足条件:该段的Content-Type不为multipart的任何子类型,且非text/plain类型,同时该段段体部分长度大于64字节。各段的段体开始位置是在紧随段头的空行之后,段体结束于下一个boundary字符串之前的空行。若不满足,则跳转到步骤2011 ;否则,生成一个32字节的GUID (全局唯一标识符),并将该段体内容封装成以该GUID为文件名的文件。然后,步骤2014将该段体从邮件源码中移除。步骤2015在该段的段头增加2个扩展域,域名X-Filename的域值为⑶ID文件名,域名X-File-Locat1n的域值为主机IP。步骤2016将该文件名加入子件名列表CompFileList,然后跳转到步骤2011继续处理后续各段。
[0036]邮件客户端在发送邮件给邮件服务器时,服务器的主流程如图4所示。步骤301使用SMTP协议接收邮件。步骤302使用专用协议接收该邮件分离出的所有子件。步骤303将所接收到的子件文件放入缓存。步骤304将所有子件文件信息加入全局子件映射表。为每个子件增加的key为该子件的GUID文件名,表项链表含2个链表节点,I个记录发送客户端的IP,另一个记录邮件服务器本身的IP,并为链表节点设置相应的timestamp属性。
[0037]发送邮件过程中,客户端步骤204与服务器的步骤302使用的协议如图5所示。该协议使用TCP传输协议,邮件服务器端开启侦听端口,等待客户端的连接,邮件服务器端为每个新到的连接分配一个工作端口。当客户端与邮件服务器建立TCP连接后,依次向邮件服务器推送邮件中分离出的各子件。推送每个子件时,首先,客户端向服务器端发送推送文件请求,格式为:“PUSH-FILE:”+ “GUID文件名”+ “;SIZE:”+ “文件大小”+ “#”。服务端接收到推送请求后返回就绪消息“2500K”。客户端收到服务器端就绪消息后发送内容。月艮务器以推送请求中携带的文件大小判断文件内容是否接收完成,当接收完文件内容后,返回成功消息“2500K”。当客户端推送完所有子件后,发送结束推送请求“FINISHED”,服务器端收到后,返回结束确认消息“221Bye”,并关闭该工作连接。客户端收到结束确认消息后,也关闭连接。
[0038]在客户端接收邮件时,客户端的主要流程如图6所示。步骤401使用POP3协议接收邮件。步骤402用户代理显示邮件内容,并接收用户下载子件操作,这些子件包括超文本正文、内嵌资源或附件等。步骤403判断是否存在下一个子件缓存位置IP,若不存在,则跳转到步骤404。如果存在,则步骤405取下一个子件缓存位置IP。步骤406使用专有协议从该缓存位置IP获取子件,如果成功获得子件,则执行步骤407。否则,跳转到步骤403。步骤407将下载的子件交由用户代理显示,并继续接收用户下载其他子件的操作。步骤404使用专有协议从服务器获得更多子件缓存位置。
[0039]在客户端接收邮件时,服务器的主要流程如图7所示。步骤501使得POP3协议收到客户端发送的接收邮件请求。步骤502读取邮件源码后,再依次更新邮件源码X-File-Locat1n域的域值。步骤503判断邮件源码中是否存在下一个X-Filename域,若不存中则跳转到步骤506。若存在,则步骤504以接收客户端IP和X-Filename后的文件名为参数获取文件缓存位置IP列表。步骤505将X-Filename之后的X-File-Locat1n域值设置为步骤504得到的子件缓存位置IP列表,然后,跳转到步骤503继续。步骤506利用POP3协议发送更新完缓存地址后的邮件源码。
[0040]步骤504中获取子件缓存位置IP列表的详细流程如图8所示。步骤5041从覆盖网络中取从接收节点经过I跳可达的所有邻节点的IP,组成列表neighborSet。步骤5042从全局文件映射表中取该子件文件名为key对应的链表表项中所有IP,并组成一个列表cacheSeto步骤5043以〈子件文件名,接收节点IP>为key,检索已查询节点表,取出对应链表表项中所有的IP,组成一个列表hasTriedSet。步骤5044计算I跳可达且缓存有该子件,同时未查询过的缓存节点的IP列表,validSet = (neighborSet Π cacheSet) -hasTriedSet)。步骤5045从覆盖网络中,将接收节点到L3中所有节点的代价值取出,再将L3中所有节点按代价值的升序排序。步骤5046取L3前numTry个节点的IP组成列表L4。步骤5047以〈子件文件名,接收节点IP>为key值在已查询节点中查询,若未找到相应表项,则步骤5048先在已查询节点表中加入新表项,key值为〈子件文件名,接收节点IP〉。否贝1J,步骤5049直接将L4中节点的IP加入已查询节点表中key值为〈子件文件名,接收节点IP>的链表表项,并更新表项的时间戳为当前时间+超时间隔pullTime。步骤504A判断全局文件映射表中以子件文件名为key的表项链表中是否存在接收节点的IP。若不存在,则步骤504B在该表项链表中加入一个链表节点,节点属性为〈接收节点IP,当前时间+invalidTime〉。否则,跳转到步骤504C。步骤504C结束步骤504,返回L4的节点IP列表。
[0041]步骤403使用的下载子件协议如图9A所示。
...
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1