如何在python中通过tcp套接字发送大型数组?有可能发送?

时间:2014-06-25 11:43:45

标签: python

我没有一个展示的例子。我提到了一些在线网站,但没有找到符合我要求的东西。请有人给我一个例子来使用。

2 个答案:

答案 0 :(得分:2)

有多种选择。我会尝试:

  • 而不是大数组,尝试获取一个一个接一个地提供项目的生成器或迭代器。这可以在发送过程中节省你的内存(但如果你可以在内存中使用整个数组,则没有必要)
  • 不要使用普通套接字,请使用ZeroMQ(在其上运行)。
  • 定义用于发送阵列的协议。假设阵列是扁平的,它可以使用以下类型的消息:
    • startarray
    • 的ItemData
    • endarray
  • 在发送" startarray"之前循环遍历要发送的项目并逐个发送。消息,然后一个接一个,最后由" endarray"消息
  • 通过TCP传输,您需要选择一些序列化格式。我会从JSON开始。
  • 发送者可以使用PUSH类型的ZMQ套接字,接收者将使用PULL。

答案 1 :(得分:1)

您可以在python wiki找到如何实现该目标的最低工作示例。

为了完整起见,我复制了上述网站的代码。您创建一个服务器:

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
data = conn.recv(BUFFER_SIZE)
     if not data: break
     print "received data:", data
     conn.send(data)  # echo
 conn.close()

和客户:

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()

print "received data:", data

由于这是google去python tcp socket时的第一个搜索结果,我假设你没有做任何研究。正如其他用户所指出的那样,请在将来做一些研究。