獲取與端點的連線

2022-07-05 05:21:10 字數 2349 閱讀 9456

api 文件:點選

在twisted中,我們使用高階抽象的介面在傳輸和接收資料,比如itransport 和 iprotocol。同時,twisted也提供了構建面向資料流連線的端點的介面:istreamserverendpointandistreamclientendpoint。 「資料流」的意思是指端點連線是乙個連續流的資料傳輸而不是乙個序列的離散資料報:

tcp is a "stream" protocol whereas udp is a "datagram" protocol。

建立和使用endpoints :

通過前幾節我們知道,編寫乙個客戶端或者伺服器,我們通常是指定了位址和埠。但是有的時候在無需調整我們的程式的前提下,我們希望允許使用者指定監聽和連線的位址,允許使用者請求不同的策略,這時候我們就需要使用clientfromstringorserverfromstring。

每種型別的端點不過就是乙個介面和乙個需要引數的簡單方法。serverendpoint.listen(factory)在你的protocol factory下 監聽端點,clientendpoint,connect(factory)在啟動乙個連線請求。

istreamserverendpoint.listen返回乙個 由ilisteningport引發deferred。注意這個deferred可能**乙個errback,最常見的情況就是有另外的程式在占用所請求的埠,實際情況因人而異。如果你收到這樣的乙個錯誤,這意味著您的應用程式實際上是沒有監聽,將不會得到任何傳入的連線。在這種情況下,它是提醒管理員的伺服器出現了錯誤,尤其是如果你只有乙個監聽埠。

還有,如果連線一旦成功,它將永遠監聽,如果你需要關閉,除了對伺服器全部關閉的方法(reactor.stop()),確保你對監聽埠物件保留乙個引用,你可以呼叫ilisteningport.stoplistening,最後,記住stoplistening 本身返回乙個deferred,直到deferred被觸發,對於埠的監聽可能沒有完全停止。

大多數伺服器應用程式不必擔心這些細節。

connectprotocol把乙個protocol例項 連線到給定的 >istreamclientendpoint。連線一旦建立,它返回乙個由protocol 觸發的deferred。通過

client documentation

我們可以看到應用的例子.

connectprotocol是乙個包裝了低階 api:istreamclientendpoint.connect的包裝器,它為嘗試乙個外部連線使用 protocol factory。其返回乙個deferred

,deferred伴隨著乙個由factory'sbuildprotocol方法或者連線失敗產生的errbacks返回的iprotocol 所觸發。 

有的時候連線耗費了很長時間,你的使用者可能因此而感覺煩惱。如果需要,你可以呼叫deferred.cancel來放棄連線。這應該會引起deferred的errback,通常是cancellederror。儘管一些端點提供了內建的超時,但是該介面並不能保證所有的都擁有。為此我們可以自己構造乙個方法來取消乙個永遠保持等待的連線嘗試。

下面是乙個非常簡單的30秒超時: 

attempt =connectprotocol(myendpoint, myprotocol)

reactor.calllater(30, attempt.cancel)

注意,如果你之前用過clientfactory,記住endpoint.connect()使用factory而不是clientfactory。如果你傳遞乙個clientfactory給connec方法,將會呼叫

clientconnectionfailedandclientconnectionlos。

使用 endpoint的好處:

待理解。

有的時候,你也不必需要使用endpoint,如果你只是繫結乙個簡單的埠, 你只需要使用構造

,(使用 

的框架。這種方法提供了與endpoint同樣的靈活性。

endpoint types included with twisted:

clientfromstringandserverfromstring 所使用的直譯器可以通過第三方plugins來擴充套件。所以endpoints的可用與否取決於你的系統中所安裝的包,但是twisted本身包含了一組基本的可用端點。

Web Api 端點設計 與 Oauth

最近一直看這方面的東西,總結如下 在後續會進行例項demo演示,本篇進行理論詳解。web api 內部資料思考 和 利用http快取優化 api api介面安全加強設計方法 一 什麼是web api 二 什麼是api端點 端點是指用於訪問api的uri,由不同的功能而擁有不同的端點。以獲取使用者資訊...

Web Api 端點設計 與 Oauth

最近一直看這方面的東西,總結如下 在後續會進行例項demo演示,本篇進行理論詳解。web api 內部資料思考 和 利用http快取優化 api api介面安全加強設計方法 一 什麼是web api 二 什麼是api端點 端點是指用於訪問api的uri,由不同的功能而擁有不同的端點。以獲取使用者資訊...

socket獲取本機位址位址與獲取連線者位址資訊

tcp 對於伺服器來說,在bind以後就可以呼叫getsockname來獲取本地位址和埠。getpeername只有在連線建立以後才呼叫,否則不能正確獲得對方位址和埠,所以他的引數描述字一般是連線描述字而非監聽套介面描述字。對於客戶端來說,在呼叫socket時候核心還不會分配ip和埠,此時呼叫get...