用木蘭編程語言編寫 WebSocket 聊天服務(wù)示例

【安裝:pip install ulang,用法與例程請見 PyPI。源碼位于開源中國(文末鏈接)。 Python 3.7,源碼文件 UTF-8 編碼

本周發(fā)布木蘭編程語言版本 0.0.14.8。將 Python 框架 tornado自帶的用 WebSocket 實現(xiàn)聊天的例程改為木蘭實現(xiàn)。順便將該例程涉及的木蘭與 Python 語法對比小結(jié),包括本周重現(xiàn)的 super 語法等。

1 實例演示

用木蘭編程語言編寫 WebSocket 聊天服務(wù)示例

主要木蘭代碼如下(完整代碼見源碼庫)

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("發(fā)到%d個接收端", len(聊天渠道.接收端)) for 某接收端 in 聊天渠道.接收端 { // TODO: try catch 尚待重現(xiàn) //try: 某接收端.write_message(消息) //except: // logging.error("Error sending message", exc_info=True) } } func $on_message(內(nèi)容) { logging.info("收到消息: %r", 內(nèi)容) parsed = tornado.escape.json_decode(內(nèi)容) 消息 = {"id": str(uuid.uuid4()), "body": parsed["body"]} 消息["html"] = tornado.escape.to_basestring( $render_string("message.html", message=消息) ) 聊天渠道.更新歷史(消息) 聊天渠道.廣播(消息) }}

2 與例程涉及的 Python 語法對比

下面都基于當(dāng)前對木蘭的認識,今后隨重現(xiàn)項目進展可能修改

必須(否則報錯)

  • 如碰到形參的關(guān)鍵詞為 type,需改為位置形參。如原始例程中的:

define("port", default=8888, help="run on the given port", type=int)

最后一個形參的 keyword 為 type,正好是木蘭的語法關(guān)鍵詞。因此只能改為位置形參(順便中文化封裝):

func 定義(名稱 : str, 默認=nil, 類型=nil, 幫助=nil) { define(名稱, 默認, 類型, 幫助)}定義("port", 默認=8888, 幫助="在此端口運行服務(wù)", 類型=int)

  • 木蘭只有靜態(tài)方法(staticmethod)。碰到 Python 的 classmethod 時,引用類變量時用類名取代 cls。見上面的 更新歷史 方法。
  • 需 tuple() 初始化元組,見前文介紹
  • 所有塊改為 {},取代 Python 中的冒號
  • class 變 type,用冒號指定類型,包括指定形參類型、超類等
  • 注釋段用 /* */,注釋行用 //
  • import 變 using
  • None 變 nil
  • def 變 func
  • 【本周】super() 變 super
  • 【本周】不支持 **,改用列舉形參
  • 類變量需用{}包圍
  • 字典初始化 {:}

可選

  • self 變 $,見前文介紹
  • 構(gòu)造函數(shù)用類名而非__init__
  • 無參數(shù)函數(shù)定義時可省略 ()

附:代碼量統(tǒng)計

主要部分的代碼行數(shù)統(tǒng)計,格式為:上次->現(xiàn)在。

  • 木蘭代碼量 2965 -> 3114
    • 編輯器,實現(xiàn)與測試都是木蘭代碼:432 -> 431 (在為分為前后端實現(xiàn)調(diào)研網(wǎng)絡(luò)服務(wù)框架)
    • 木蘭測試用例,包括部分實用小程序(如井字棋):2533 -> 2683

  • Python 代碼量(木蘭實現(xiàn)與測試框架):2594 -> 2612
    • 分析器/語法分析器.py:1008 -> 1019
    • 分析器/詞法分析器.py:204 -> 207
    • 測試/運行所有.py,檢驗所有木蘭測試代碼片段:192 -> 194
    • 環(huán)境.py,定義全局方法:171 -> 172
    • 分析器/語法成分.py,從語法分析器中提取出來的枚舉常量:81 -> 82
    • 功用/反饋信息.py:65 -> 67
    • 測試/unittest/語法樹.py,確保生成的語法樹與原始版本一致:67 -> 66
    • 未變
      • 分析器/語法樹.py:202
      • 交互.py,交互環(huán)境(REPL):138
      • 中.py,主程序:74
      • 功用/調(diào)試輔助.py,:57
      • setup.py, 34
      • 分析器/錯誤.py:17
      • 測試/unittest/交互.py,交互環(huán)境相關(guān)測試:28

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。

(0)
上一篇 2023年3月15日 上午10:28
下一篇 2023年3月15日 上午10:44

相關(guān)推薦

  • 個人環(huán)游計劃項目管理

    個人環(huán)游計劃項目管理 隨著旅游熱的興起,個人游也成為了越來越多人的選擇。但是,如何規(guī)劃個人游計劃,讓旅行更加高效、有趣、安全,是一個需要認真思考的問題。本文將介紹一種個人環(huán)游計劃項…

    科研百科 2025年8月9日
    2
  • 后臺管理系統(tǒng)項目描述

    后臺管理系統(tǒng)項目描述 隨著數(shù)字化時代的到來,企業(yè)的數(shù)字化進程也在不斷加速。為了更好地管理企業(yè)的業(yè)務(wù)和數(shù)據(jù),企業(yè)需要建立一個現(xiàn)代化的后臺管理系統(tǒng)。這個系統(tǒng)可以為企業(yè)提供高效、穩(wěn)定、安…

    科研百科 2025年7月26日
    1
  • plc項目管理方案

    PLC項目管理方案 PLC(可編程邏輯控制器)是一種廣泛應(yīng)用于工業(yè)自動化領(lǐng)域的控制器,通過編程來控制機器的運行。在工業(yè)自動化領(lǐng)域中,PLC項目管理非常重要,因為它直接關(guān)系到PLC設(shè)…

    科研百科 2025年8月8日
    2
  • 通用項目管理系統(tǒng)怎么用

    通用項目管理系統(tǒng)是一種用于管理各種類型的項目的軟件工具。使用通用項目管理系統(tǒng)可以提高項目管理水平,減少手動操作的錯誤,提高工作效率,并確保項目在正確的時間和質(zhì)量范圍內(nèi)完成。在本文中…

    科研百科 2025年7月13日
    1
  • 山東臨沂:省外入臨返臨人員須提前3天登記報備(外省進臨沂后是否要報備)

    為防范人員流動帶來風(fēng)險 進一步做好新冠疫情防控工作 臨沂市防指發(fā)布 疫情防控最新要求 要點如下: 自2021年1月1日起至春運結(jié)束 ●臨沂市以城市小區(qū)、農(nóng)村村居為單位,對返鄉(xiāng)人員進…

    科研百科 2024年3月17日
    102
  • 福佑卡車App 5.3新版本 更新運輸軌跡分享、實時位置查看(福佑卡車app怎么樣)

    在城際貨運中,實時獲取貨物運輸狀態(tài)是貨主的核心訴求。12月24日,福佑卡車貨主端App 5.3版本再度優(yōu)化。在5.3版本中,福佑卡車上線了運輸軌跡查詢及分享、時效預(yù)警等功能,發(fā)貨人…

    科研百科 2024年5月22日
    56
  • 科研項目預(yù)計成本多少

    科研項目預(yù)計成本是多少? 科研項目的預(yù)計成本是衡量一個項目是否成功的重要指標(biāo)之一。然而,在選擇預(yù)算時,需要考慮許多因素,例如項目的類型、規(guī)模和復(fù)雜性。在這篇文章中,我們將討論科研項…

    科研百科 2025年4月22日
    2
  • 華中科技大學(xué)項目管理

    華中科技大學(xué)項目管理 華中科技大學(xué)項目管理教授團隊是一支具有豐富經(jīng)驗和卓越技能的專家隊伍,他們致力于研究和提供最先進的項目管理方法和工具。華中科技大學(xué)項目管理教授團隊的研究成果廣泛…

    科研百科 2025年8月13日
    1
  • sap項目實施管理

    SAP項目實施管理 隨著信息技術(shù)的不斷發(fā)展,企業(yè)越來越需要使用SAP軟件來管理業(yè)務(wù)流程和數(shù)據(jù)。但是,SAP軟件的復(fù)雜性和昂貴性使得許多企業(yè)無法承擔(dān)其費用,這也導(dǎo)致了企業(yè)使用SAP的…

    科研百科 2025年8月9日
    1
  • 精神病學(xué)教學(xué)科研立項標(biāo)題怎么寫

    精神病學(xué)教學(xué)科研立項標(biāo)題怎么寫 精神病學(xué)是一門重要的學(xué)科,它涉及到人類心理健康的方方面面。在教學(xué)過程中,精神病學(xué)教師需要不斷更新自己的知識和技能,以適應(yīng)不斷發(fā)展的醫(yī)學(xué)科學(xué)和技術(shù)。因…

    科研百科 2024年10月22日
    5
精品国产一区二区三区香蕉| 久久久久久AV无码免费网站| CHINESE熟女老女人HD视频| 糖心VLOG精品一区二区三区| 日韩视频免费在线| 国产色无码精品视频免费| 动漫美女吸乳羞羞动漫| 久久久久久一区国产精品| 阿娇囗交全套高清视频| 最新69堂国产成人精品视频| 国产网址在线观看| 亚洲精品乱码久久久久久蜜桃| 一品道一本香蕉视频| 精品3d动漫视频一区在线观看 | 国产成人综合欧美精品久久| 亚洲欧美国产一区二区三区| eeuss影院在线观看| 永久免费无内鬼放心开车| 婷婷六月丁香午夜爱爱| 午夜视频在线观看区二区| 久久久久亚洲AV成人无码网站| 色八a级在线观看| 日日天干夜夜人人添| 国产偷国产偷亚洲高清在线| 久激情内射婷内射蜜桃| 豆奶视频最新官网| 日本系列1页亚洲系列| 国产大学生系列| 久热中文字幕在线精品免费| 色费女人18毛片a级毛片视频| 日本私人网站在线观看| 国产午夜福利精品一区二区三区| 久久综合伊人77777| 色多多免费视频观看区一区| 日日噜狠狠噜天天噜av| 国产av午夜精品一区二区入口| 中文字幕精品视频在线观| 白白国产永久免费视频| 天使a中文在线观看| 人妻中文字幕无码专区| 久久人午夜亚洲精品无码区|