Blockdit Logo
Blockdit Logo (Mobile)
สำรวจ
ลงทุน
คำถาม
เข้าสู่ระบบ
มีบัญชีอยู่แล้ว?
เข้าสู่ระบบ
หรือ
ลงทะเบียน
Sarun's Computing
•
ติดตาม
25 ก.ย. 2020 เวลา 16:13 • วิทยาศาสตร์ & เทคโนโลยี
การเขียนโปรแกรมเครือข่ายด้วยซ็อกเก็ต (socket) ตอนที่ 5: 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 เป็นการสร้างเธรดโดยระบุชื่อฟังก์ชันที่ต้องการให้เธรดไปทำงาน และส่งซ็อกเก็ตเชื่อมต่อเป็นพารามิเตอร์ให้กับฟังก์ชัน
ส่วนฟังก์ชันไคลเอนต์ไม่ต้องแก้อะไรครับ เวลารันโปรแกรมก็รันโปรแกรมเซิร์ฟเวอร์ก่อน และลองรันไคลเอนต์มากกว่าหนึงตัวติดต่อเข้าไปที่เซิร์ฟเวอร์ จะเห็นว่าคราวนี้เซิร์ฟเวอร์สามารถให้บริการไคลเอนต์แต่ละตัวได้โดยไม่ต้องรอคิวกันแล้วครับ
สำหรับโค้ดโปรแกรมโหลดได้จากลิงก์นี้ครับ
https://github.com/ajsarun/simple_concurrent_tcp_server_python
อ่านเรื่องราวความรู้ทางด้านวิทยาการคอมพิวเตอร์ได้ที่
https://computingblog.intakosum.net/
1 บันทึก
ดูเพิ่มเติมในซีรีส์
Socket Programming
1
โฆษณา
ดาวน์โหลดแอปพลิเคชัน
© 2025 Blockdit
เกี่ยวกับ
ช่วยเหลือ
คำถามที่พบบ่อย
นโยบายการโฆษณาและบูสต์โพสต์
นโยบายความเป็นส่วนตัว
แนวทางการใช้แบรนด์ Blockdit
Blockdit เพื่อธุรกิจ
ไทย