بيثون: SocketServer غير متزامن
-
21-09-2019 - |
سؤال
أنا أتطلع http://docs.python.org/library/socketserver.html لمحاولة التعامل مع الطلبات غير المتزامنة مع SocketServer في Python. في الجزء السفلي ، هناك مثال ، لكنه لا معنى له. تقول أنك تستخدم المنفذ 0 الذي يعين منفذ غير مستخدم. ولكن كيف تعرف ما هو المنفذ الذي يجب استخدامه للعميل إذا لم يكن في نفس البرنامج؟ أنا لا أفهم تمامًا كيفية جعل هذا مفيدًا.
المحلول
نظرًا لأن العميل يتم تنفيذه في نفس البرنامج النصي مثل الخادم ، فإن المنفذ معروف. في سيناريو العالم الحقيقي ، يجب عليك تحديد منفذ لخفيك. إلى جانب السماح لعملائك بمعرفة المنفذ الذي يجب الاتصال به ، قد تحتاج أيضًا إلى معرفة حتى تتمكن من فتح جدران الحماية بين عملائك والخادم الخاص بك.
نصائح أخرى
في المثال الذي ربطته ، يجلبون المنفذ:
# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
ومع ذلك ، يجب أن تبحث حقًا عن www.twistedmatrix.com إذا كنت جادًا في كتابة معالجة ASYNC :)
تحتاج إلى استرداد المنفذ الذي تم تعيينه إلى socketserver
مرة واحدة في bind
يتم ذلك: في هذه الحالة ، من المحتمل أن يكون هذا من خلال ip, port = server.server_address
.
المنفذ التعسفي هو فقط إذا كنت ترغب في إنشاء خادم دون تحديد منفذ: سيقوم نظام التشغيل بتعيين منفذ متاح.
بالطبع يجب أن يكون هناك أيضًا وسيلة لتحديد المنفذ الذي يجب ربطه بـ.
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address
...
client(ip, port, "Hello World 1")
تقول قيمة المنفذ 0 "لا يهمني رقم المنفذ" ، لذا فإن Server_address port
يتم تعيين القيمة من خلال استدعاء ThreadeDtCpserver (). انها ليست صفر. في وقت لاحق ، أنت تمرير ذلك port
قيمة للعميل ، الذي يستخدمه.