我在Python中第一次使用套接字,並且遇到問題。將參數傳遞給Python中的UDP處理程序
我有一個線程的請求處理程序爲我的UDP服務器,但由於它的工作方式(建議here)我無法弄清楚如何傳遞參數。我需要它來訪問應用程序中的其他對象,因爲它必須通知他們由網絡中不同客戶端執行的操作。然而,表示處理程序的類不能被實例化,所以它不能通過構造函數接受參數。
這是我的代碼的簡化版本。
class ThreadedUDPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print ("{} wrote:".format(self.client_address[0]))
print (data)
#Ideally, I'd call a method of an object here
class ThreadedUDPServer(socketserver.ThreadingMixIn, socketserver.UDPServer):
pass
class ServerManager():
def __init__(self, player_box):
self.player_box = player_box
HOST, PORT = "xxx.xxx.xxx.xxx", 9999
self.server = ThreadedUDPServer((HOST, PORT), ThreadedUDPRequestHandler)
ip, port = self.server.server_address
def start(self):
server_thread = threading.Thread(target=self.server.serve_forever)
server_thread.start()
def stop(self):
self.server.shutdown()
在這種情況下,我希望請求處理程序訪問的對象是player_box。目標是每次請求時調用該對象的方法。有沒有辦法做到這一點,或者我應該使用不同的方法?
我注意到有一個類似的問題here,但提出的解決方案根本不適用於我。事實上,它並沒有多大意義,我...
已經有socketserver.ThreadedUDPServer – jfs
@ J.F。塞巴斯蒂安這個結構是在我提供的鏈接中提出的。不過,我認爲你可能指的是ThreadingUDPServer,儘管我忽略了兩者之間是否應該有區別。 – broncoAbierto
是的,這是一個錯字:'s/ed/ing /'。參見[source](http://hg.python.org/cpython/file/default/Lib/socketserver.py#l627) – jfs