0

我正在使用类似系统的保管箱,我想知道当服务器端的文件更改时客户端如何得到通知。我的印象是,Dropbox 和 ubuntu 都通过 HTTP 端口运行,工作方式如下: 1. 如果客户端计算机上的文件发生更改,inotify 会检测到它并执行从客户端到服务器的推送。(我得到这部分) 2. 如果服务器上的文件发生更改,则会从服务器向客户端发送一个简单的主动通知(只是一条消息说“同步时间”)。然后客户端启动到服务器的同步。

我真的不在乎我用哪种语言来做这件事。我只是想知道如何联系客户。具体来说,如果客户端位于具有自己本地 IP 地址的防火墙后面怎么办。服务器如何定位它?

另外,什么样的消息传递协议会被用来做这样的事情?我计划通过 HTTP 或 SSH 执行此操作,但我没有附件这样做。

4

2 回答 2

1

我不确定 Dropbox 使用的是什么,但它可能是websockets(不太可能,它是一个相当新且未广泛部署的东西)或更可能是从客户端到服务器的待处理 Ajax 请求——服务器仅在何时响应它为客户提供了新的东西。后者是使用 HTTP 实现某种形式的“服务器推送”(好吧,好吧——“hack”;-)的常用方法。

于 2010-07-17T16:08:36.297 回答
0

对网络进行了一些研究以了解其工作原理,但它比我预期的要简单得多。我现在为此使用标准 Java 套接字。启动侦听套接字连接的服务器进程。然后启动连接到服务器的客户端。

建立连接后,可以将消息发送回去和第四次发送。这通过 NAT(网络地址转换)工作,这是在防火墙后面的专用网络上路由数据包的标准方法。

于 2011-02-08T17:11:14.947 回答