socketserver實現併發

2022-09-09 04:39:12 字數 2955 閱讀 6049

使用socketserver模組實現多執行緒或多程序併發

#tcp服務端

import

socketserver

class

myserver(socketserver.baserequesthandler):

defhandle(self):

print("

conn是:

",self.request) #

建立的鏈結,self.request來自baserequesthandler的init建構函式

#注意對於tcp來說self.request是accept到的鏈結conn,但對於udp來說是客戶端回傳的資料data和udp套接字物件self.socket

print("

addr是:

",self.client_address) #

接收的對方通訊位址,也是來自於baserequesthandler

while

true:

try:

data = self.request.recv(1024)

ifnot data:break

print("

收到客戶端訊息

",data)

self.request.sendall(data.upper())

except

exception as e:

print

(e)

break

if__name__ == "

__main__":

s = socketserver.threadingtcpserver(("

127.0.0.1

",8080),myserver) #

多執行緒實現併發

#創造例項,threadingycpserver繼承threadingmixin,tcpserver,tcpserver繼承baseserver

#通過一系列繼承關係完成基於何種套接字家族,bind,listen

#最終是產生乙個例項,這個例項就是乙個通訊鏈結

s.serve_forever()

#得到的是request, client_address = self.get_request()

#然後通過一系列的繼承關係將這兩個引數傳到自定義的類中,再觸發自定義類的父類的init方法

#最後執行自定義類中的handle方法,進行通訊

socketserver模組

通過例項產生乙個個鏈結,每個例項各自進行通訊,互不干擾,實現併發

就相當於分成多個服務端,每個服務端對應乙個客戶端

server類:處理鏈結

"udpserver",---》繼承"tcpserver",----》繼承"baseserver"

"unixstreamserver",---》繼承tcpserver

"unixdatagramserver"---》繼承udpserver

request類:處理通訊

"baserequesthandler"

"streamrequesthandler"----》繼承baserequesthandler

"datagramrequesthandler"---》繼承baserequesthandler

#threading執行緒

class threadingtcpserver(threadingmixin, tcpserver)

class threadingudpserver(threadingmixin, udpserver)

#forking程序

class forkingudpserver(forkingmixin, udpserver)

class forkingtcpserver(forkingmixin, tcpserver)

#udp服務端

import

socketserver

class

myserver(socketserver.baserequesthandler):

defhandle(self):

print("

資料和套接字物件是:

",self.request) #

建立的鏈結,self.request來自baserequesthandler的init建構函式

#注意對於tcp來說self.request是accept到的鏈結conn,但對於udp來說是客戶端回傳的資料data和udp套接字物件self.socket

print("

收到的客戶端資料:

",self.request[0])

print("

addr是:

",self.client_address) #

接收的對方通訊位址,也是來自於baserequesthandler

self.request[1].sendto(self.request[0].upper(),self.client_address)

#相當於udp_server.sendto(data.upper(),addt)

if__name__ == "

__main__":

s = socketserver.threadingudpserver(("

127.0.0.1

",8080),myserver) #

多執行緒實現併發

#創造例項,threadingycpserver繼承threadingmixin,udpserver,udpserver繼承tcpserver,tcpserver繼承baseserver

#通過一系列繼承完成基於什麼套接字家族,bind

s.serve_forever()

使用threadingudpserver時handle的self.request的內容是(data,self.socket),因為udp協議是不需要建立鏈結的

socketserver實現併發(Python)

server類 處理鏈結 request類 處理通訊 基於tcp 服務端 import socketserver class myserver socketserver.baserequesthandler def handle self print self.request conn print ...

socketserver實現併發操作

服務端 當無端埠有問題時,改個埠 socketserver 實現併發 import socketserver class myserver socketserver.baserequesthandler def handle self 內建handle方法 print conn is self.re...

2 socketserver實現併發

1 tcp socketserver伺服器端 coding utf 8 import socketserver class myserver socketserver.baserequesthandler defhandle self print conn is self.request print...