摘要:我们开发了一个基于BT的互联网文件下载和更新系统。BT的优点:多个用户下载同一个源的时候,用户之间可以互通有无、互相提供对方没有的数据块。这可以减轻服务器压力,提高分发速度。BT的缺点:其种子文件的格式无法适应在游戏更新时,往往只有小部分数据(某些文件或文件的某些块)需要下载的情况。因为它在生成种子文件时,是把多个文件连接成为一个不间断的"字节流",然后按块生成hash。当某些文件改变时,无法通过新旧种子文件的比对快速计算出哪些块需要更新。我们的改进:我们改进了种子文件的格式,改进之后的格式是每个文件拥有自己的hash,而不是所有文件的hash串在一起。这样当游戏更新时,能
阅读全文
摘要:服务与用户界面之间的通信分为两个部分,一是用户界面对服务的操作;二是服务不定时的向界面发送状态或者动作通知。通常服务与界面之间的通信可以采用的方案有socket(tcp/udp)和命名管道两种方式,socket方案的优势是用户界面可以很容易的在另外一台计算机上操作远程计算机上的服务;而命名管道通常只能管理本机上的服务(最多可以在局域网上管理其它计算机而且需要配置)。我们的选择是使用socket方案,同时采用TCP方式,因为相对UDP来说,TCP更加给人以可靠的感觉,除了需要处理“流”的分包,TCP相对UDP更加可靠一点。然后为了处理命令和状态两种不同性质的通信,我们设计了两种socket,分别
阅读全文
摘要:BitTorrent是一个成熟稳定快速的P2P资源共享系统。其协议是为大文件下载而设计,然而在网游更新领域,BT有它与生俱来的缺陷。BT的种子文件,是将多个文件首尾相连视为一个大的“流”文件,然后根据指定的块大小,将这个“流”文件划分为若干块,再对每块数据生成一个20字节的sha1,再将这些sha1数据保存到种子文件里面,之后BT下载时,按块下载,按块校验。而在游戏更新时,通常只有一部分文件或者某个文件的一部分被改变,这时应该仅仅下载并更新需要修改的数据块文件(因为互联网是最慢的环节)。但是如何计算出本次更新有哪些数据块需要下载?新生成的种子文件与旧的种子文件进行比较,无法计算出这些块数据!(
阅读全文
摘要:先看看的node.js的比较有趣特征: (摘自http://baike.baidu.com/view/3974030.htm)“Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻
阅读全文