Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多播是否适用于本地主机内的一对多流?_Python_Sockets_Multicast - Fatal编程技术网

Python 多播是否适用于本地主机内的一对多流?

Python 多播是否适用于本地主机内的一对多流?,python,sockets,multicast,Python,Sockets,Multicast,我有一个中央数据源,我想重新分发给许多客户。数据馈送产生约1.8 kB/s。目前,我正在将提要写入一个文件,每个客户机读取文件的结尾。这似乎有点不对劲。这是我现在拥有的伪代码 提要: o = open('feed.txt','a',0) #no buffering, maybe line buffer would be better while 1: data = feed.read(8192) data = parse_data(data) o.write(data)

我有一个中央数据源,我想重新分发给许多客户。数据馈送产生约1.8 kB/s。目前,我正在将提要写入一个文件,每个客户机读取文件的结尾。这似乎有点不对劲。这是我现在拥有的伪代码

提要:

o = open('feed.txt','a',0) #no buffering, maybe line buffer would be better
while 1:
    data = feed.read(8192)
    data = parse_data(data)
    o.write(data)
    time.sleep(0.01)
服务器(每个客户端在新线程中连接):


我想做的是用套接字替换文件,并将消息直接写入多播数据包。每当一个新的客户端连接到服务器时,我只需启动一个新线程并开始侦听多播数据包。是否有任何标准的设计模式来处理这种情况?

更简单的是,只需让所有客户端在同一端口上多播。这样,您的服务器甚至不需要跟踪伪连接

基于多播在我们的网络基础设施上“最可靠”的事实,我们对内部网络上的一些软件使用了类似的方案。我们已经对负载进行了压力测试,直到每秒有超过30K的消息时才开始丢弃数据包

#!/usr/bin/python

import sys
import socket

ADDR = "239.239.239.9"
PORT = 7999

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((ADDR,PORT))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

while True:
    data, addr = sock.recvfrom(2048)
    print data
    sys.stdout.flush()
#!/usr/bin/python

import sys
import socket

ADDR = "239.239.239.9"
PORT = 7999

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((ADDR,PORT))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

while True:
    data, addr = sock.recvfrom(2048)
    print data
    sys.stdout.flush()