使用websocket的长响应消失了

时间:2019-07-19 04:16:07

标签: python websocket

我目前有一个使用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

0 个答案:

没有答案