那麼我們先看socketserver怎麼用呢,然後在分析,先看下面的**
import socketserver #1、引入模組
class myserver(socketserver.baserequesthandler): #2、自己寫乙個類,類名自己隨便定義,然後繼承socketserver這個模組裡面的baserequesthandler這個類
def handle(self): #3、寫乙個handle方法,必須叫這個名字
#self.request #6、self.request 相當於乙個conn
self.request.recv(1024) #7、收訊息
msg = '親,學會了嗎'
self.request.send(bytes(msg,encoding='utf-8')) #8、發訊息
self.request.close() #9、關閉連線
# 拿到了我們對每個客戶端的管道,那麼我們自己在這個方法裡面的就寫我們接收訊息傳送訊息的邏輯就可以了
pass
if __name__ == '__mian__':
#thread 執行緒,現在只需要簡單理解執行緒,別著急,後面很快就會講到啦,看下面的圖
server = socketserver.threadingtcpserver(('127.0.0.1',8090),myserver)#4、使用socketserver的threadingtcpserver這個類,將ip和埠的元祖傳進去,還需要將上面咱們自己定義的類傳進去,得到乙個物件,相當於我們通過它進行了bind、listen
server.serve_forever() #5、使用我們上面這個類的物件來執行serve_forever()方法,他的作用就是說,我的服務一直開啟著,就像京東一樣,不能關閉**,對吧,並且serve_forever()幫我們進行了accept
#注意:
#有socketserver 那麼有socketclient的嗎?
#當然不會有,我要作為客戶去訪問京東的時候,京東幫我也客戶端了嗎,客戶端是不是在我們自己的電腦啊,並且socketserver對客戶端沒有太高的要求,只需要自己寫一些socket就行了。
基於tcp的套接字,關鍵就是兩個迴圈,乙個鏈結迴圈,乙個通訊迴圈
1 server類:
組合得到
SocketServer原始碼學習補充
在前兩個文章中整理了關於baseserver部分以及baserequesthandler,以及通過對tcp的處理的流程的整理,這次整理的是剩下的關於用於擴充套件的部分,這裡通過對執行緒擴充套件進行整理 threadingmixin 類實現了多執行緒的方式,它只有兩個方法,分別是process req...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
Cartographer原始碼篇 原始碼分析 1
在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...