簡體   English   中英

Python套接字 - 創建消息格式

[英]Python Sockets - Creating a message format

我已經構建了一個Python服務器,各種客戶端可以連接到該服務器,我需要設置從客戶端到服務器的預定義消息系列 - 例如,客戶端在第一次連接時將名稱傳遞給服務器。

我想知道最好的辦法是什么? 我應該如何為他們的溝通建立一個簡單的協議?

如果消息以一組特定字節開頭以將其標記為此協議的一部分,那么是否包含某種消息ID? 任何建議或進一步閱讀贊賞。

根據要求,您可能需要考慮使用JSON :使用帶有JSON編碼的“newline”終止字符串。 傳輸協議可以是HTTP :通過這種方式,您可以訪問所有“連接相關”設施(例如狀態代碼)並具有JSON編碼的有效負載。

通過HTTP使用JSON的優點:

  1. 人類可讀(調試等)
  2. 可用於所有語言/平台的庫
  3. 跨平台
  4. 瀏覽器可調試(在某種程度上)

當然,還有很多其他方法可以讓這只貓變亮,但使用這種方法工作原型時間非常 如果您的要求(這里不是非常詳細)可以滿足,這是值得考慮的。

首先,您需要決定是否希望您的協議是人類可讀的(更多開銷)或二進制。 如果是第一個,您可能希望使用正則表達式來解碼消息。 為此,請使用python模塊re 如果是后者,模塊struct是你的朋友。

其次,如果你正在構建一個有點狀態的協議(例如,首先我們進行握手,然后我們傳輸數據,然后我們檢查校驗和並說再見)你可能想要創建某種FSM來跟蹤狀態。

第三,如果協議設計不是熟悉的主題,請閱讀一些簡單的協議規范,例如IETF

如果這不是一個學習練習,你可能想要從其他東西建立起來,比如Python Twisted

閱讀一些協議,並嘗試找到一個看起來像你需要的協議。 它需要面向消息還是面向流? 是否需要保留請求順序,是否需要請求與響應配對? 你需要消息標識符嗎? 重試,后退? 它是RPC協議,消息隊列協議嗎?

有關數據文件格式和協議的詳細概述和討論,請參見http://www.faqs.org/docs/artu/ch05s02.htmlhttp://www.faqs.org/docs/artu/ch05s03.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM