วันศุกร์ที่ 25 กันยายน พ.ศ. 2563

การเขียนโปรแกรมเครือข่ายด้วยซ็อกเก็ตตอนที่ 12 เขียนโปรแกรม TCP Concurrent Server ด้วยภาษา Python

ในบทความวันนี้จะมาปรับปรุงโปรแกรม TCP Iterative Server ที่เขียนด้วยภาษา Python ให้เป็น Concurrent Server ครับ ซึ่งหลักการก็เหมือนกับการเขียนโปรแกรมด้วยภาษา Java นั่นคือใช้ เธรด (thread) มาให้บริการไคลเอนต์ที่ติดต่อเข้ามา โปรแกรมที่ปรับปรุงแล้วเป็นดังนี้ครับ 

01: # tcpserver.py

02: import socket

03: import threading

04: def echo_thread_function(connectionSocket):

05:     clientSentenceBytes = connectionSocket.recv(4096)

06:     clientSentence = clientSentenceBytes.decode("utf-8")

07:     connectionSocket.send(str.encode(clientSentence.upper()))

08:     connectionSocket.close()

09: 

10: welcomeSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

11: welcomeSocket.bind(("localhost", 6789))

12: welcomeSocket.listen(5)

13: while True:

14:     print("The server is waiting")

15:     connectionSocket, address = welcomeSocket.accept()

16:     echoThread = threading.Thread(target=echo_thread_function, args=(connectionSocket,))

17:     echoThread.start()


บรรทัดที่ 4-8 เป็นฟังก์ชันที่เราจะให้เธรดไปเรียกใช้งาน ซึ่งจะเห็นว่างานในการอ่านข้อมูลที่ไคลเอนต์ส่งมา แปลงตัวอักษรตัวใหญ่เป็นตัวเล็ก และส่งค่ากลับไปให้ไคลเอนต์ถูกย้ายมาอยู่ในฟังก์ชันนี้ บรรทัดที่ 16 เป็นการสร้างเธรดโดยระบุชื่อฟังก์ชันที่ต้องการให้เธรดไปทำงาน และส่งซ็อกเก็ตเชื่อมต่อเป็นพารามิเตอร์ให้กับฟังก์ชัน 

ส่วนฟังก์ชันไคลเอนต์ไม่ต้องแก้อะไรครับ เวลารันโปรแกรมก็รันโปรแกรมเซิร์ฟเวอร์ก่อน และลองรันไคลเอนต์มากกว่าหนึงตัวติดต่อเข้าไปที่เซิร์ฟเวอร์ จะเห็นว่าคราวนี้เซิร์ฟเวอร์สามารถให้บริการไคลเอนต์แต่ละตัวได้โดยไม่ต้องรอคิวกันแล้วครับ 

สำหรับโค้ดโปรแกรมโหลดได้จากลิงก์นี้ครับ  

ไม่มีความคิดเห็น:

โพสต์ความคิดเห็น