木兰编程语言 0.0.14.8: websocket 聊天演示;部分比较 Python 语法

2020-11-08 13:48:45 +08:00
 xuanwu

原文:《木兰编程语言 0.0.14.8:websocket 聊天演示;部分比较 Python 语法

[安装:pip install ulang,用法与例程请见 PyPI。源码位于开源中国注意:必需 python 3.7,源码文件需 UTF-8 编码]

本周将 Python 框架 tornado自带的用 websocket 实现聊天的例程改为木兰实现。顺便将该例程涉及的木兰与 Python 语法对比小结,包括本周重现的 super 语法等。

1 实例演示

主要木兰代码如下(完整代码在此

type 聊天渠道 : tornado.websocket.WebSocketHandler {
  {
    接收端 = set()
    历史 = []
    历史长度 = 200
  }

  func $get_compression_options {
    // Non-None enables compression with default options.
    return {:}
  }

  func $open {
    聊天渠道.接收端.add($)
  }

  func $on_close {
    聊天渠道.接收端.remove($)
  }

  func 更新历史(消息) {
    // 必须指定类
    聊天渠道.历史.append(消息)
    if len(聊天渠道.历史) > 聊天渠道.历史长度 {
      聊天渠道.历史 = 聊天渠道.历史[-聊天渠道.历史长度 :]
    }
  }

  func 广播(消息) {
    logging.info("发到%d 个接收端", len(聊天渠道.接收端))
    for 某接收端 in 聊天渠道.接收端 {
      // TODO: try catch 尚待重现
      //try:
      某接收端.write_message(消息)
      //except:
      //    logging.error("Error sending message", exc_info=True)
    }
  }

  func $on_message(内容) {
    logging.info("收到消息: %r", 内容)
    parsed = tornado.escape.json_decode(内容)
    消息 = {"id": str(uuid.uuid4()), "body": parsed["body"]}
    消息["html"] = tornado.escape.to_basestring(
      $render_string("message.html", message=消息)
    )

    聊天渠道.更新历史(消息)
    聊天渠道.广播(消息)
  }
}

2 与例程涉及的 Python 语法对比

下面都基于当前对木兰的认识,今后随重现项目进展可能修改

[余下见原文《木兰编程语言 0.0.14.8:websocket 聊天演示;部分比较 Python 语法》]

643 次点击
所在节点    推广
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/722889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX