3

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

所以,最初的想法是:

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

2.每个客户端都得到对方的IP。

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

4.Sender读取文件并将其传输给receiver。

问题是:

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

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

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

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

4

1 回答 1

2

好的,您的通信如下所示:

(C->N)<->N<->(N->C)

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

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

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

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

于 2012-08-15T15:41:35.760 回答