您当前的位置: 首页 > 旅游

解决Dropbox中国无法及时自动同步的

2019-03-05 06:15:46

近由于想要使用Dropbox的多人协作功能,就发现Dropbox不能自动同步其他机器上产生的文件变化,经过一番搜索,发现原来是GFW在作怪(GFW和GD的性质和用心我们心知肚明,就不在这里评价了)。月光博客发布了解决Dropbox无法实时更新的问题分析了产生这个问题的原因并提出一个有效的解决方案。但是在使用时我发现,我找不到一个优良稳定的代理服务器,也没工夫去学习privoxy软件的配置和使用,而且我要将解决方案提供给我的合伙人,一个复杂的方案是不能接受的。经过一番研究,提出如下比较简单的办法。

分析 我发现Dropbox向notify8发出的请求很简单,回应也很简单,一共有两种:{ ret : new }和{ ret : punt }

分别表示云端有变化和无变化,然后客户端考虑去下载文件列表并同步。

经过一番痛苦的失败,

我发现这个请求的其实是一个comet请求,服务器端并不马上回应,而是会挂起,如果有变化,则马上回应,如果一直没有变化,大约一分钟超时回应punt,然后客户端再连接服务器。在我分析Dropbox的过程中一直不解:为什么Dropbox的其他请求都是https,而只有这一个请求是http的。现在找到了答案:因为它是comet请求,长连接,而且连接频率非常高,如果使用https代价太大,而且影响效率。如果这个请求返回new,客户端就会使用https连接服务器端。

解决 由此提出一个完美的解决方案,不仅可以解决本机的问题,而且可以解决朋友的问题,只要让朋友修改hosts为我的ip地址:

修改hosts将notify8对应的ip地址改为本机 在本机建立一个http服务,代理notify8得到dropbox的返回值,再原封不动地返回给本机dropbox客户端 具体方法是使用tornado,进行一步http请求,这样只占用很少一部分系统资源。贴出代码。

代码#!/usr/bin/env python

# -*- coding: utf-8 -*-

import tpserver

import loop

import tions

import b

from tions import define, options

from tornado import httpclient

define( port , default=8888, help= run on the given port , type=int)

class Application(plication):

def __init__(self):

handlers = [

(r /subscribe , NotifyHandler),

(r /.* , HomeHandler),

]

settings = dict(

debug=True,

)

bug = True

plication.__init__(self, handlers, **settings)

class HomeHandler(questHandler):

def get(self):

t_header( Content-Type , text/plain )

ite( Hello from Tornado! )

class NotifyHandler(questHandler):

@ynchronous

def get(self):

t_header( Content-Type , text/plain )

url = xxxxx #关键代码还是不贴出来了,人怕出名猪怕壮,要是大多数人会用了,估计这个方法死期不远矣!

http_client = yncHTTPClient()

http_tch(url, ndle_response, request_timeout=100.0)

def handle_response(self, response):

if ror:

print Can not connect.

ite( {\ ret\ : \ new\ } )

else:

print Connect Successfull.

ite(dy)

nish()

def main():

rse_command_line()

http_server = TPServer(Application())

http_sten(rt)

stance().start()

if __name__ == __main__ :

main()

来源:投稿,原文链接。

今天貌似很多国外服务器的站都打不开fklal 于 5:30:00 回复是的。真是气愤。fklal 于 5:30:33 回复今天跟昨天一直是这样。连Live,微软都打不开。wozhenshangxin 于 13:18:27 回复我这边是只要不是大陆站点都上不去……

2012/4/5 0:19:38 支持(29)反对(19) 回复

博主:

和你说一个的消息,昨天下午6点开始 湖南中国电信一直访问不上国外的站,其他省市都可以访问。请问是不是电信的问题 刚才致电了10000说可能是国外服务器的问题。mvke 于 20:54:56 回复中国移动的络也出现这样的问题,我是今天上午上班发现的。估计是gfw又抽风了。

2012/4/5 12:50:22 支持(29)反对(22) 回复

没看懂,本机不能直接访问dropbox http的话,在本机架设代理也还是不能访问啊。代理服务器必须是能够直接访问目标的机器吧?还是说没有贴出来的那部分代码里有什么玄机,直接链接到某个服务器了?

我试了一下ping notify*发现是能够ping通的,返回IP也是美国地址,就是不知道是否为其真实IP。如果是址关键字匹配,是否直接修改本机的notify服务器host即可实现状态更新,而无需设置代理?

因为不懂python所以只能写这些了,不知作者能否指教……

2012/10/23 14:47:42 支持(4)反对(6) 回复

(*)

验证(*)

推荐阅读
图文聚焦