2015-11-06 3 views
0

Я использую tornado websocket send/recv сообщение, клиент отправляет сообщение json и сообщение recv сервера и json parse, но почему сервер получает сообщение, которое является сообщением mutil json, например {"a":"v"}{"a":"c"}, как обрабатывать это сообщениеtornado websocket получить много сообщений, когда on_message называется

ответ

0

Я пишу fucntion разобрать соответствующее сообщение

def parse_multi_msg(msg): 
    is_in_quotation = False 
    aObjs = [] 
    sTemp = "" 
    for c in msg: 
    sTemp += c; 

    if c == '"': 
     if not is_in_quotation: 
     is_in_quotation = True 
     else: 
     is_in_quotation= False 


    if c == "}" and not is_in_quotation: 
     aObjs.append(json.loads(sTemp)); 
     sTemp = ""; 

    return aObjs 
+0

Да, что будет работать до тех пор, пока значение JSON не содержит вложенный словаря - внутренний словарь будет иметь первый неупомянут}, которая означает, что вы попробуйте декодировать выражение типа json-like-but-bad-syntax - более общим решением было бы правильно разграничить сообщения. – barny

1

Возможно, вы должны разграничить отправленные сообщения, поэтому их легко разбить - в этом случае вы могли бы добавить \ n, очевидно, что разделитель не должен происходить в сообщении. Другим способом было бы префикс каждого сообщения с его длиной также четко разграниченным образом, тогда получатель считывает длину, то это количество байтов и анализирует ее.

Смежные вопросы