У меня есть центральный канал данных, который я хочу перераспределить среди многих клиентов. Подача данных производит ок. 1,8 кБ / с. В настоящее время я записываю канал в файл, и каждый клиент читает его конец. Что-то в этом просто кажется неправильным. Вот псевдокод для того, что у меня сейчас ...
Подача:
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)
Сервер (каждый клиент подключается в новом потоке):
feed = open('feed.txt','r')
feed.seek(-1024,2)
while 1:
dat = feed.read(1024)
if len(dat)==0:
# For some reason if the end of the file is reached
# i can't read any more data, even there is more.
# some how backing off seems to fix the problem.
self.feed.seek(-1024,2)
self.feed.read(1024)
buffer += dat
idx = buffer.rfind('\n')
if idx>0:
data = buffer[:idx]
buffer = buffer[idx+1:]
for msg in data.split('\n'):
client.send(msg)
time.sleep(0.01)
Что я хотел бы сделать, это просто заменить файл сокетом и записать сообщения непосредственно в многоадресные пакеты. Каждый раз, когда новый клиент подключается к серверу, я просто запускаю новый поток и начинаю прослушивать многоадресные пакеты. Существуют ли стандартные шаблоны дизайна для этого случая?