如何优化局域网中的数据传输?

How can I optimize data transmission in local area network?

我想要的是传输一个矩阵,例如一个 1000x1000 的矩阵(实际上比那个大),在 R 中从 NodeA 到 NodeB。现在我使用下面的代码:

节点A:

A<-matrix(0,1000,1000)
Conn1<-socketConnection(port=8000, server=TRUE)
write.table(A,file = Conn1, col.names = FALSE) 

节点B:

HostId<-'x.x.x.x'
Conn2<-socketConnection(host=HostId, port=8000, blocking=TRUE)
A<-read.table(file = Conn2,nrows =1000)

但是当我运行同时传输4个并且矩阵的维度满足1.5k(一个~20Mb的矩阵)时,我需要大约30s才能完成数据传输。但是,在我看来,FTP的数据传输速度约为10Mb/s,应该比30s快很多,所以我想知道如何改进我的代码?

提前致谢。


编辑:

尝试 后,发生了一些奇怪的事情:

serialize 覆盖 test1

中的 write.table
t1<-proc.time()
S<-unserialize(Con,refhook = NULL)
t2<-proc.time() -t1

t3<-proc.time()
S<-read.table(file=Con)
t4<-proc.time() -t3

proc.time() 的输出是 14s vs 70s:

但是,当我在 this answer (test2) 这样的框架中同时 运行 4 段代码时,serializewrite.table 花费了很多时间.

serialize的输出是101s(ptn中的第三个数)

write.table的输出是16s(ptn中的第三个数)

感谢任何能忍受这么长post(还有我糟糕的英语)的人。 命令serialize可能是最好的答案,如果我只有一段代码到运行,但是test2中的奇怪事件确实超出了我的范围.我想知道我是否必须使用一些外部工具,例如 MPI。

对于 read.tablewrite.table,您在传输之前将 table 转换为文本。这将需要时间并增加尺寸。查看 serialize() 将矩阵转换为二进制格式。

编辑:您似乎无法与多个客户端交互。如果你愿意学习一些东西,我会建议像 ZeroMQ 这样的东西,例如通过 rzmq 包。不过,您将不得不考虑架构。有关几个示例,请参阅 http://zguide.zeromq.org/page:all