如何在2个node.js实例之间有效地传输文件?

时间:2012-08-15 14:02:29

标签: node.js websocket socket.io file-transfer

我正在使用app.js开发聊天应用程序,这是webkit + node.js框架。 所以我在两边都有node.js和桥接网络浏览器环境。 我想使文件传输功能有点类似于Skype。

所以,最初的想法是:

1.将客户端连接到主服务器。

2.每个客户都获得了相同的ip。

3.在两个客户端上启动套接字或websocket服务器并相互连接。

4.Sender读取文件并将其发送给reciver。

问题是:

1.我不确定一个客户可以“看到”另一个客户。

2.file是二进制数据,但是websockets是为文本消息而制作的,所以我需要某种编码/解码的东西。我考虑过base 64,但它有30%的“开销”信息。所以我需要一些更有效的东西(基础128?)。

3.如果使用websocket效率不高,我应该使用TCP套接字吗?如果我决定使用它们会出现什么问题?

是的,我知道node2nodeBinaryJS,我只是不知道我是否应该使用它们。我自己真的该做些什么。

1 个答案:

答案 0 :(得分:2)

好的,您的通信看起来像这样:

(C-将N)< - 将N< - >(N-&℃)

(...)安装在一台客户端的计算机上。 N是节点服务器,C是Web客户端。

  1. 这是你无法控制的。一些文件共享应用程序将测试数据包从中央服务器发送到客户端,以检查端口是否打开以及NAT规则是否正确配置等。您的客户端将在某个端口上启动自己的服务器,您的主服务器可能会创建一个测试连接到这些服务器在看到其他客户可以发送文件之前,看看它们是否正确启动并开放到网络上。

  2. Websockets非常适合从服务器到Web GUI的状态消息以及一般的客户端到客户端通信。对于实际的文件传输,我会使用TCP套接字,请参阅下一个答案。另一方面,base64编码实际上并不是一个缓慢的过程,使用它并对其性能进行基准测试,然后决定用一些数据来支持你的决定。

  3. 您可以使用组合:从服务器到Web GUI的websockets,但服务器本身之间的TCP通信。 TCP服务器(和流)在Node中不难设置,我认为没有任何缺点。它可能实际上没有在这些服务器上安装node2node那么复杂,因为TCP已经内置。