我目前有一个使用websockets 8.0的Python 3.7客户端和服务器。服务器执行的方法可能需要很长时间(超过5分钟),具体取决于客户端发送的数据。
当响应很小时(根据我的测试,大约为0.7 MB,但我真的不知道问题是否出在大小上),客户端和服务器都可以正常通信。但是,当响应很大时(通常是在请求很大时,这意味着服务器中的方法需要更长的处理时间),客户端似乎在收到完整响应之前就关闭了连接。
然后,当我尝试将响应转换为JSON格式时,解码器会引发错误:JSONDecodeError("Expecting value", s, err.value) from None
。
我尝试在获得响应后立即打印响应的开始,并且已正确打印,但是无法打印整个响应。如果稍后尝试在程序上打印变量,则响应似乎为空。
如果我将响应保存到文件中,则可以看到响应写在文件上,但是我得到BrokenPipeError: [Errno 32] Broken pipe
,更新文件时,它为空。
这是我给客户的代码:
import json
import pandas as pd
import sys
from websocket import create_connection
from websocket._exceptions import WebSocketAddressException
class TestClient:
def __init__(self, host, port):
self.uri = "ws://{}:{}".format(host, port)
self.client = None
def connect(self):
self.client = create_connection(self.uri)
def match(self, classifier: pd.DataFrame):
uri = self.uri
request = {
'columns': classifier.columns.tolist(),
'values': classifier.values.tolist()
}
# send message to server
message = json.dumps(request)
self.client.send(message)
# get response
response = self.client.recv()
#print(response[:100]) --> if I try to print right here,
#I can usually see the beginning of the response.
#If I try to print the whole response, it seems to be empty.
# convert to json
response = json.loads(response)
我需要获得完整的答复才能将其传递给json.loads
。