Arabic (العربية/عربي) translation by Diangr (you can also view the original English article)
هذا البرنامج التعليمي سوف تعطي مقدمة إلى مأخذ التوصيل في Python وكيفية استخدام الوحدة النمطية لمآخذ التوصيل لبناء خوادم HTTP وعملاء في Python. وسوف تشمل أيضا إعصار، مكتبة الربط الشبكي بيثون الذي يعتبر مثاليا للاقتراع طويلة، WebSockets، وغيرها من التطبيقات التي تتطلب اتصال معمرة لكل مستخدم.
ما هي المآخذ؟
مأخذ توصيل هو ارتباط بين اثنين من التطبيقات التي يمكن الاتصال مع بعضها البعض (أما محلياً على جهاز واحد أو عن بعد بين جهازين في مواقع منفصلة).
أساسا، كمأخذ وصلة اتصال بين هذين الكيانين، أي خادم وعميل. وسوف نعطيه خادم المعلومات المطلوبة من عميل. على سبيل المثال، عندما قمت بزيارة هذه الصفحة، المستعرض إنشاء مأخذ توصيل ومتصلا بالخادم.
مأخذ توصيل وحدة نمطية
من أجل إنشاء مأخذ توصيل، يمكنك استخدام الدالة socket.socket()
، وبناء جملة بسيطة مثل:
import socket s= socket.socket (socket_family, socket_type, protocol=0)
هنا هو وصف للوسائط:
- socket_family: يمثل الأسرة عنوان (والبروتوكول). يمكن أن تكون أما AF_UNIX أو AF_INET.
- socket_type: يمثل نوع مأخذ التوصيل، ويمكن أن يكون أما من SOCK_STREAM أو SOCK_DGRAM.
- البروتوكول: هذا وسيطة اختيارية، وأنها عادة ما تكون افتراضياً إلى ٠.
بعد الحصول على كائن المقبس الخاص بك، يمكنك ثم إنشاء الملقم أو العميل كما هو مطلوب باستخدام الأساليب المتوفرة في الوحدة النمطية لمآخذ التوصيل.
إنشاء عميل بسيط
قبل أن نبدأ، دعونا ننظر في الأساليب مأخذ توصيل العميل المتوفرة في Python.
-
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-
s.connect()
: يبدأ اتصال ملقم TCP.
لإنشاء مأخذ توصيل جديدة، يمكنك استيراد أولاً الأسلوب مأخذ من فئة مأخذ التوصيل.
import socket
وبعد ذلك، سوف نقوم بإنشاء مأخذ تيار (TCP) على النحو التالي:
stream_socket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
الوسيطة AF_INET يشير إلى أن كنت تطلب مأخذ توصيل بروتوكول إنترنت (IP)، على وجه التحديد IPv4. الوسيطة الثانية هي نوع بروتوكول النقل SOCK_STREAM
لمآخذ توصيل TCP. بالإضافة إلى ذلك، يمكنك أيضا إنشاء مأخذ IPv6 بتحديد وسيطة AF_INET6
مأخذ التوصيل.
حدد الملقم.
server = "localhost"
تحديد منفذ نريد التواصل مع.
port =80
قم بتوصيل مأخذ التوصيل إلى الميناء حيث يتم الاستماع الملقم.
server_address = ((host, port)) stream_socket.connect(server_address)
من المهم ملاحظة أن المضيف والمنفذ يجب أن تكون مجموعة.
إرسال طلب بيانات إلى الخادم:
message = 'message' stream_socket.sendall(message)
الحصول على الاستجابة من الملقم:
data = sock.recv(10) print data
لإغلاق مأخذ توصيل متصل، يمكنك استخدام أسلوب أغلق:
stream_socket.close()
أدناه هو التعليمات البرمجية الكاملة للعميل/الملقم.
import socket import sys # Create a TCP/IP socket stream_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Define host host = 'localhost' # define the communication port port = 8080 # Connect the socket to the port where the server is listening server_address = ((host, port)) print "connecting" stream_socket.connect(server_address) # Send data message = 'message' stream_socket.sendall(message) # response data = stream_socket.recv(10) print data print 'socket closed' stream_socket.close()
بناء خادم بسيط
الآن دعنا نلقي نظرة على ملقم Python server. فيما يلي بعض الأساليب الملقم مأخذ التوصيل المتوفرة في Python.
s = socket.socket (socket.AF_INET، مأخذ التوصيل. SOCK_STREAM)
-
s.bind()
: ربط العنوان (اسم المضيف ورقم المنفذ) على مأخذ توصيل. -
s.listen()
: يقوم بإعداد وبدء تشغيل وحدة الإصغاء TCP. -
s.accept()
: يقبل اتصال عميل TCP.
ونحن سوف اتبع الخطوات التالية:
- إنشاء مأخذ توصيل.
- ربط مأخذ التوصيل بمنفذ.
- بدء قبول اتصالات على مأخذ التوصيل.
هنا هو برنامج الملقم.
import socket import sys # Create a TCP/IP socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Define host host = 'localhost' # define the communication port port = 8080 # Bind the socket to the port sock.bind((host, port)) # Listen for incoming connections sock.listen(1) # Wait for a connection print 'waiting for a connection' connection, client = sock.accept() print client, 'connected' # Receive the data in small chunks and retransmit it data = connection.recv(16) print 'received "%s"' % data if data: connection.sendall(data) else: print 'no data from', client # Close the connection connection.close()
الملقم جاهز الآن للاتصالات الواردة.
الآن قم بتشغيل برامج العميل والخادم في نوافذ طرفية منفصلة ، حتى يتمكنوا من التواصل مع بعضهم البعض.
إخراج الخادم
$ python server.py waiting for a connection ('127.0.0.1', 47050) connected received "message"
إخراج العميل
$ python client.py connecting message socket closed
إطار تورنادو
إطار تورنادو واحدة من المكتبات المتاحة لشبكة البرمجة في بيثون. في هذا القسم، سوف تناقش هذه المكتبة وإظهار كيفية استخدامها لبناء WebSockets.
تورنادو هو إطار بيثون على شبكة الإنترنت ومكتبة الشبكات غير المتزامنة. يستخدم Tornado شبكة I / O غير المحظورة ، وبالتالي فهو قادر على التوسع إلى عشرات الآلاف من الاتصالات المفتوحة. هذه السمة تجعلها مثالية للاستطلاعات الطويلة ، ومآخذ الويب ، والتطبيقات الأخرى التي تتطلب اتصالًا طويل الأمد لكل مستخدم.
دعونا خلق ويبسوكيت تورنادو بسيطة:
import tornado.ioloop import tornado.web class ApplicationHandler(tornado.web.RequestHandler): def get(self): self.message = message = """<html> <head> <title>Tornado Framework</title> </head> <body <h2>Welcome to the Tornado framework</h2> </body> </html>""" self.write(message) if __name__ == "__main__": application = tornado.web.Application([ (r"/", ApplicationHandler), ]) application.listen(5001) tornado.ioloop.IOLoop.instance().start()
في التعليمات البرمجية أعلاه:
- علينا أن نحدد الفئة
ApplicationHandler
الذي يعمل كمعالج لطلب وتقوم بإرجاع استجابة باستخدام الأسلوبwrite()
. - الأسلوب
main
هو الدخول للبرنامج. - إنشاء قاعدة لتطبيق ويب
tornado.web.Application
ويأخذ مجموعة من معالجات، أي أبليكاتيونهاندلير. - التطبيق يستمع على منفذ ٥٠٠٠، ويمكن الاتصال عميل لهذا التطبيق باستخدام نفس المنفذ.
-
tornado.ioloop.IOLoop.instance.()start()
إنشاء مؤشر ترابط nonblocking لتطبيق.
إذا نحن بتشغيل التطبيق، سوف نحصل على النتيجة كما هو موضح في الصورة أدناه.



الاستنتاج
الآن يجب أن يكون أدرك أساسيات البرمجة المقبس في Python، وكيف يمكنك بناء بسيطة من الملقم والعميل. لا تتردد في تجربة بناء الخاصة بك العميل المحادثة. للحصول على مزيد من المعلومات، قم بزيارة Python docs.
بالإضافة إلى ذلك، لا تتردد في مشاهدة ما لدينا المتاحة للبيع ودراسة السوق Envato، ولا تتردد في طرح أي أسئلة وتقديم ملاحظاتك القيمة باستخدام موجز ويب أدناه.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly