當前位置:首頁 » 編程語言 » socketiopython

socketiopython

發布時間: 2023-02-19 14:49:25

㈠ 話說socket.io 為何這么叼python 有類似玩意嗎

Socket.IO是一個可以讓瀏覽器與伺服器實現實時通信的類Websocket的抽象。Gevent-socket是Socketio協議的一個python實現。
參考LearnBoost開發的Node.js的Socket.IO伺服器端實現,現在已經有多種語言的Socket.IO server實現了。

這個項目的目的之一是實現一個可以運行在各種基於WSGI的web開發框架(例如 Pyramid, Pylons, Flask, web2py, Django...)之上的以gevent為基礎的統一API。只需要大約3行代碼就可以把它配置到你的框架里。【注意:】使用gevent-socket ,需要使用gevent python WSGI伺服器。

㈡ 話說socket.io 為何這么叼python 有類似玩意嗎

python是最早實現web socket的語言之一,其下的大量框架都有不計其數的web socket的支持,也就是socketio的功能,其中,tornado提供了原生的支持,flask-socketio就是socketio的flask版(flask是python的web框架)。djanggo也有對應的框架,幾乎可以說,常見的python的web框架全部實現了socketio的功能。說起websocket的支持,python說第二沒人敢說第一。

㈢ python-socketio 文檔翻譯

教程: https://tutorialedge.net/python/python-socket-io-tutorial/

python-socketio 原文地址 ,在google瀏覽器中可以翻譯為中文去使用。

首先要搞明白幾個問題:

說明
1)第一種room是每一個單獨的客戶端都有的。(通過 session ID 可以找到)
2)第二種是應用程序自己創建的。
在下面這個方法中,如果省略掉room參數,將會自動發送給所有的連接了的客戶端。

譯文:

Python-socketio實現了一個Python Socket.IO 服務,這個服務可以單獨運行也可以綜合於一個web項目中。下面是一些它的特徵:

什麼是Socket.IO?

Socket.IO是一個基於事件的雙向通訊的傳輸協議(一般是web瀏覽器),和一個服務端。原始的客戶端和服務端組件實現是通過JavaScript寫的。

入門指南

可以使用 pip 安裝Socket.IO:

下面是一個使用 aiohttp 框架(只支持Python 3.5+)實現非同步IO的 Socket.IO server 簡單的例子:

下面是一個類似的例子,但是使用的Flask和Eventlet的例子,兼容Python2.7和3.3+:

客戶端應用必須引入 socket.io-client 庫(1.3.5版本以及以上,越高越好)。

每次客戶端連接到伺服器的連接事件處理程序調用sid(會話ID)分配給連接和WSGI環境字典。

每次客戶端連接到服務端的 conenct 事件都是由sid(session ID)分配到連接和WSGI環境字典調用的。服務端可以檢查身份認證或者其他的頭部信息去決定是否這個客戶端允許被連接。要想拒絕一個客戶端的連接,這個處理器必須返回 False 。

當客戶端發送發送一個事件給服務端,相應的事件處理器會被 sid 和這個信息調用,可以是單個或者多個參數。這個應用可以定義盡量多的如果被需要的可以被事件處理器關聯的事件。一個事件可以通過一個名稱簡單定義。

當一個客戶端連接中斷了, disconnect 事件就被調用,允許應用去執行清理工作。

服務端

Socket.IO 服務端是 socketio.Server 類的實例,他們可以被一個WSGI適用應用程序使用 socketio.Middleware 去合並:

使用 socketio.Server.on() 方法來注冊服務端的事件處理器:

對於非同步服務端來說,事件處理器可以是常規方法,或者是協程:

聊天室

因為Socket.IO是一個雙向的協議,服務端可以在任意時間發送消息給任意的連接到的客戶端。為了讓它方便去將客戶端定位到組中,應用程序可以將客戶端放入到聊天室中去,然後將消息定位到整個聊天室中。

當客戶端第一次連接,他們是被分配到他們自己的聊天室中,這個聊天是是以session ID(sid 參數會傳遞給所有的事件處理器)命名的。應用可以通過 socketio.Server.enter_room() 和 socketio.Server.leave_room() 自由地去創建聊天室和管理客戶端。客戶端可以在盡量多的房間里,也可以根據需求盡量頻繁地被拉入拉出聊天室。當他們的連接不在特別的時候,單獨的聊天室將會分配給她它們,應用程序可以自由地增加和移除客戶端從聊天室中,盡管它只要這樣做就會失去定位獨立客戶端的能力。

socketio.Server.emit() 方法會獲得一個事件名稱,一個可能是 str , bytes , list , dict 或者 tuple 類型的消息載體。當發送一個 tuple ,在其中的元素必須是上面的其他類型。元組中的元素將會被傳遞給客戶端的回調函數為多個參數。定位一個個人客戶端,客戶端的 sid 將會被給一個聊天室(假設這個應用沒有修改這些初始的聊天室)。定位所有的連接的客戶端們,這個聊天室參數將會被觸發。

通常在聊天室中當廣播一個消息到一個用戶組的時候,發送者是否接受他自己的消息是可選的。 soicketio.Server.emit() 方法提供了一個可選的 skip_sid 參數去指定一個想在廣播中跳過的客戶端。

Response

當一個客戶端發送一個事件給服務端,它可以選擇提供一個回調方法,當服務端返回一個響應的時候會被觸發。服務端可以便捷地從相應的事件處理器返回它從而提供一個響應。

事件處理器可以返回一個單獨的值,一個帶多個值的元組。這個在客戶端的回調函數將會調用這些返回的值。

Callbacks
回調

服務端可以請求一個響應通過發送一個事件給客戶端。 socketio.Server.emit() 方法有一個可選的 callback 參數能夠被設置為可回調的。當這個參數被傳遞之後,當客戶端返回相應的時候,這個可回調的方法將會被請求。

當廣播給多個客戶端的時候使用回調函數是不被推薦的,因為回調方法將會被只執行一次。

Namespace
命名空間

Socket.IO 協議支持多個邏輯性連接,所有的多路復用都是在相同的物理連接上。客戶端可以通過給每個連接指定不同的 namespace 從而開多個連接。一個命名空間是由 主機名+埠+路徑名稱構成的。比如,連接到 http://example.com:8000/chat 將會開一個連接到命名空間 /chat 。

由於分離的不同的session ID( sid s),不同的事件處理器,不同的聊天室,每一個命名空間都是獨立的。應用程序使用多個命名空間從而來區分命名空間,是非常重要的。可以參考 socketio.Server 類。

當 namespace 參數被觸發了,比如設置為 None 或者 / , 那麼一個默認的命名空間將會被使用。

Class-Based Namespaces

作為一個基於裝飾器的事件處理器的代替,這個屬於一個命名空間事件處理器可以被創建為 socketio.Namesapce 的子類:

對於基於非同步io的服務端,域名空間必須繼承與 socketio.AsyncNamespace , 也可以定義普通的方法或者協程作為事件處理器:

當使用基於類的命名空間的時候,任何被服務端接受的事件將會被分派到一個被事件名稱命名的方法中作為方法名稱(with the on_pfrefix )。比如:事件 my_event 將會被一個名叫 on_my_event 的方法處理。

熱點內容
主機如何把密碼關掉 發布:2024-11-08 10:36:25 瀏覽:719
安卓軟體如何鎖定 發布:2024-11-08 10:30:27 瀏覽:708
sql定時執行語句 發布:2024-11-08 10:29:36 瀏覽:673
邁銳寶xl值得入手哪個配置 發布:2024-11-08 10:14:13 瀏覽:634
尋歡加密 發布:2024-11-08 10:02:57 瀏覽:352
拼單源碼 發布:2024-11-08 09:58:24 瀏覽:143
linux伺服器存儲 發布:2024-11-08 09:51:40 瀏覽:473
更新時間伺服器ip移動 發布:2024-11-08 09:39:13 瀏覽:218
存儲與網路的關系 發布:2024-11-08 09:37:42 瀏覽:559
php設置文件大小 發布:2024-11-08 09:36:37 瀏覽:515