на отправляющей стороне. Попробуйте отключить это:
наилучший подход для обработки соединения с сокетом, где мне нужно VARdata
закончить переводом строки\n
? Я использую код ниже, но иногдаtcp
пакеты получаютфрагментированный и это занимает много времени, чтобы соответствоватьdata.endswith("\n")
, Я также пробовал другие подходы, такие как сохранение последней строки, если она не заканчивается\n
и добавить его вdata
на следующем цикле. но это также не работает, потому что несколько пакетов разбиваются на части, а первая и вторая части не совпадают. У меня нет контроля над другим концом, он в основном отправляет несколько строк, которые заканчиваются\r\n
.
Любое предложение будет приветствоваться, так как я не очень разбираюсь в сокетных соединениях.
def receive_bar_updates(s):
global all_bars
data = ''
buffer_size = 4096
while True:
data += s.recv(buffer_size)
if not data.endswith("\n"):
continue
lines = data.split("\n")
lines = filter(None, lines)
for line in lines:
if line.startswith("BH") or line.startswith("BC"):
symbol = str(line.split(",")[1])
all_bars[symbol].append(line)
y = Thread(target=proccess_bars, kwargs={'symbol': symbol})
y.start()
data = ""
Пример "нормальный" data
:
line1\r\n
line2\r\n
line3\r\n
Примерфрагментированный data
:
line1\r\n
line2\r\n
lin