用木兰编程语言编写WebSocket聊天服务示例
【安装:pip install ulang,用法与例程请见 PyPI。源码位于开源中国(文末链接)。 需 python 3.7,源码文件需 UTF-8 编码】
本周发布木兰编程语言版本 0.0.14.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 语法对比
下面都基于当前对木兰的认识,今后随重现项目进展可能修改必须(否则报错)如碰到形参的关键词为 type,需改为位置形参。如原始例程中的:define("port", default=8888, help="run on the given port", type=int)
最后一个形参的 keyword 为 type,正好是木兰的语法关键词。因此只能改为位置形参(顺便中文化封装):func 定义(名称 : str, 默认=nil, 类型=nil, 帮助=nil) { define(名称, 默认, 类型, 帮助) } 定义("port", 默认=8888, 帮助="在此端口运行服务", 类型=int)木兰只有静态方法(staticmethod)。碰到 Python 的 classmethod 时,引用类变量时用类名取代 cls。见上面的 更新历史 方法。需 tuple() 初始化元组,见前文介绍所有块改为 {},取代 Python 中的冒号class 变 type,用冒号指定类型,包括指定形参类型、超类等注释段用 /* */,注释行用 //import 变 usingNone 变 nildef 变 func【本周】super() 变 super【本周】不支持 **,改用列举形参类变量需用{}包围字典初始化 {:}可选self 变 $,见前文介绍构造函数用类名而非__init__无参数函数定义时可省略 ()附:代码量统计
主要部分的代码行数统计,格式为:上次->现在。木兰代码量 2965 -> 3114编辑器,实现与测试都是木兰代码:432 -> 431 (在为分为前后端实现调研网络服务框架)木兰测试用例,包括部分实用小程序(如井字棋):2533 -> 2683
Python 代码量(木兰实现与测试框架):2594 -> 2612分析器/语法分析器.py:1008 -> 1019分析器/词法分析器.py:204 -> 207测试/运行所有.py,检验所有木兰测试代码片段:192 -> 194环境.py,定义全局方法:171 -> 172分析器/语法成分.py,从语法分析器中提取出来的枚举常量:81 -> 82功用/反馈信息.py:65 -> 67测试/unittest/语法树.py,确保生成的语法树与原始版本一致:67 -> 66未变分析器/语法树.py:202交互.py,交互环境(REPL):138中.py,主程序:74功用/调试辅助.py,:57setup.py, 34分析器/错误.py:17测试/unittest/交互.py,交互环境相关测试:28
筋膜枪UL1647报告办理筋膜枪UL1647要求有哪些?筋膜枪是一种软组织康复工具,通过高频率冲击放松身体的软组织,刺激其本体感觉功能,进而起到有效缓解肌肉紧张的作用,达到止痛的目的。但一般这类产品出口美国
化学品MSDS检测报告MSDS检测流程化学品MSDS到底指的是什么?MSDS(MaterialSafetyDataSheet)即化学品安全技术说明书,也可以叫做化学品安全说明书或化学品安全数据说明书。在欧洲国家,材料安
意大利食品接触材料D。M。210373测试要求该指令适用于以下定义的塑料材料产品1)塑料和物品及其零件只由塑料构成2)只由塑料组成的多层塑料3)形成密封垫片盖子用的塑料层或塑料涂层但它不适用于其中一层或多层不是塑料制成的材料或
日本食品接触材料测试JFSL370日本从第一部真正以食品为对象的法律关于取缔饮食物及其他物品的法律颁布和实施起,其对食品接触材料检测的安全管理和立法,经过百余年的发展,法制不断成熟和完备,形成了由框架性法规食品卫生
焖烧杯德国LFGB食品级测试焖烧杯是把食物(特别是汤类)放入杯中,然后注入滚烫的开水,接着把盖子盖起来闷2小时左右,借助杯子保温的功能,使得食物在近似于开水的温度中闷熟。是一种方便经济的烹饪器具。LFGB又称
美国FDA注册一。FDA简介美国食品和药物管理局(FoodandDrugAdministration)简称FDA,FDA是美国在健康与人类服务部(DHHS)和公共卫生部(PHS)中设立的执行机构
乡村振兴要靠高质量农产品打样农户靠在京东卖羊年增收平均过万生长在宁夏地区唯一的牧区县的盐池滩羊发展距今已有200多年的历史,这是中国品质最好最知名的羊肉之一。然而,很长一段时间,盐池滩羊价格上不去,销售局限在本区域,产业规模不大,农民养着
10月28日晚8点戴尔商用直播间与你一起揭秘武林秘籍在你的公司中是不是有这样一群人,他们随叫随到,为你们提供IT服务需求,有效地解决了办公问题,他们就像是江湖中的侠客,武艺超凡,想知道他们是如何练就这一身本领的吗?10月28日晚8点
30多万配备全自动空气悬架,ZEEKR001你让那些百万级豪车怎么活?现如今,车圈流行一句话,那就是软件定义汽车,但对于追求操控与舒适性的老司机来说,硬件才是至关重要。比如,相对于驾驶辅助系统,全自动空气悬架带来的操控快感与舒适乘坐感更让他们更兴奋,
大湾区金融素养教育公益联盟成立微众银行微粒贷助力反诈宣传10月29日,首届粤港澳大湾区金融素养教育公益联盟正式宣告成立,作为首批联盟成员,微众银行携手南方日报共建防范电信诈骗教育示范基地,微众银行常务副行长黄黎明获邀担任金融素养首席知识
李现李承铉张智霖等星店长喊你来京东,一起瓜分百万红包随着澎湃消费热浪如约而至,2021年的京东11。11全球热爱季已全面开启,在10月31日晚8点开始支付尾款后的四小时便累计售出商品超1。9亿件。这样可观的销量,离不开京东对消费者尤