木兰编程语言 0.0.14.8: websocket 聊天演示;部分比较 Python 语法
資深大佬 : xuanwu 1
原文:《木兰编程语言 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 语法》]
大佬有話說 (0)