调用 on_message 时,tornado websocket 获取多条消息

Posted

技术标签:

【中文标题】调用 on_message 时,tornado websocket 获取多条消息【英文标题】:tornado websocket get multi message when on_message called 【发布时间】:2015-11-06 08:32:33 【问题描述】:

我使用tornado websocket send/recv消息,客户端发送json消息,服务器recv消息和json解析,但是为什么服务器得到的消息是mutil json消息,比如"a":"v""a":"c",这个消息怎么处理

【问题讨论】:

【参考方案1】:

也许您应该对您发送的消息进行分隔,以便轻松拆分它们 - 在这种情况下,您可以添加一个 \n,显然分隔符不能出现在消息中。另一种方法是以明确分隔的方式为每条消息的长度添加前缀,然后接收者读取长度,然后读取字节数并解析它。

【讨论】:

【参考方案2】:

我写了一个函数来解析这个消息

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

【讨论】:

是的,只要 json 值不包含嵌套字典,它就可以工作 - 内部字典将有一个第一个不带引号的 ,这意味着您尝试解码类似 json 的 - 但是 -错误语法表达式 - 更通用的解决方案是正确分隔消息。

以上是关于调用 on_message 时,tornado websocket 获取多条消息的主要内容,如果未能解决你的问题,请参考以下文章

tornado Websocket Server:如何创建一个新对象以将 on_message 发送到该对象?

如何在 Tornado 中通过 websocket 传输 .png 或 .jpg 文件

为啥 on_message 会停止命令工作?

Tornado-如何在另一个函数中调用处理程序

on_message() 和@bot.command 问题

tornado内置接口调用顺序initializeprepare...