改行を使用して\n
不明な長さのメッセージを区切る TCP アプリケーションを構築しています (ただし、通常は < 64 バイト)。この記事は非常に役立つと 思います。
一度に1文字に最適な(つまり、最も効率的/最速の)アプローチrecv
であり、改行またはrecv
大きなバッファであるかどうかを確認し、「残り物」をクラスに保存しますか?
一つずつ
def __recv_until_newline(self):
message = ""
while True:
chunk = self.socket.recv(1)
if chunk == "" or chunk == "\n":
break
message += chunk
return message
バッファを維持する
def __recv_until_newline(self):
""" self.__buffer holds previously received message parts"""
message = self.__buffer
while True:
chunk = self.socket.recv(64)
message += chunk
if chunk == "" or "\n" in message:
break
# something a bit more intelligent than this in reality, but you get the idea
messages = message.split('\n')
self.__buffer = "".join([x for x in message[1:]])
return messages[0]