websockets
?websockets 是一個用 Python 建立 WebSocket 伺服器和客戶端的函式庫,重點是正確性、簡單性、穩健性和效能。
預設實作建立在asyncio
(Python 的標準非同步 I/O 框架)之上,提供了一個優雅的基於協程的 API。
也可以使用基於threading
的實作和 Sans-I/O 實作。
文件可在閱讀文件中找到。
這是一個帶有asyncio
API 的 echo 伺服器:
#!/usr/bin/env python
import asyncio
from websockets . server import serve
async def echo ( websocket ):
async for message in websocket :
await websocket . send ( message )
async def main ():
async with serve ( echo , "localhost" , 8765 ):
await asyncio . get_running_loop (). create_future () # run forever
asyncio . run ( main ())
以下是客戶端如何使用threading
API 發送和接收訊息:
#!/usr/bin/env python
from websockets . sync . client import connect
def hello ():
with connect ( "ws://localhost:8765" ) as websocket :
websocket . send ( "Hello world!" )
message = websocket . recv ()
print ( f"Received: { message } " )
hello ()
看起來不錯嗎?
開始使用教學!
作為 Tidelift 訂閱的一部分提供
websockets 和數千個其他軟體包的維護者正在與 Tidelift 合作,為您用於構建應用程式的開源依賴項提供商業支援和維護。節省時間、降低風險並改善程式碼運作狀況,同時向您使用的確切依賴項的維護者付費。了解更多。
(如果您為websockets
做出貢獻並希望成為官方支援提供者,請告訴我。)
websockets
? websockets
的開發遵循四個原則:
websockets
經過嚴格測試,符合 RFC 6455。msg = await ws.recv()
和await ws.send(msg)
。 websockets
負責管理連接,以便您可以專注於您的應用程式。websockets
是為生產而建構的。例如,在該問題在 Python 社群中廣為人知之前,它是唯一能夠正確處理背壓的函式庫。文檔是專案中首要關注的問題。請閱讀文件並親自查看。
websockets
?如果您喜歡回呼而不是協程:建立websockets
是為了提供最好的基於協程的 API 來管理 Python 中的 WebSocket 連線。為基於回呼的 API 選擇另一個函式庫。
如果您正在尋找混合的 HTTP / WebSocket 庫: websockets
旨在成為 RFC 6455:WebSocket 協定和 RFC 7692:WebSocket 壓縮擴充的出色實作。它對 HTTP 的支援很少——僅足以進行 HTTP 運行狀況檢查。
如果您想在同一台伺服器中執行這兩項操作,請查看建置在websockets
之上以支援 WebSocket 連線的 HTTP 框架,例如 Sanic。
歡迎錯誤報告、補丁和建議!
若要報告安全漏洞,請使用 Tidelift 安全聯絡人。 Tidelift 將協調修復和揭露。
對於其他任何問題,請提出問題或發送拉取請求。
參與者必須遵守貢獻者契約行為準則。
websockets
是在 BSD 許可證下發布的。