Tags:
Forums: 

คือผมจะเขียนโปรแกรมเป็น client ติดต่อกับ server แต่ client จะต้อง run รอการติดต่อกับ server ตลอดเวลาที่โปรแกรมทำงานอยู่นะครับ
ไม่ทราบว่าผมจะต้องใช้ library อะไรหรือครับ หรือว่าให้ต้องเขียนเป็นเทรดหรือครับ หรือว่าต้องเขียนให้โปรแกรมรันเองทุกๆ 1 นาทีเพื่อตรวจสอบอะครับ

Get latest news from Blognone
By: khao_lek on 27 October 2008 - 08:53 #69540

code ที่ผมเขียนขณะนี้อะครับ คือเมื่อผมติดต่อกับ server ได้เรียบร้อยแล้ว ผมต้องการให้โปรแกรมที่ผมเขียนรันไปดึงข้อมูลที่ได้จาก
server ตลอดเวลาที่โปรแกรมทำงานอยู่ครับ ในcode ผมลองใช้ทั้ง timer และ thread แต่ก็โปรแกรมล่มตลอดเลยครับ

def OnConnetServer(self, event):
self.tcpsoc = socket(AF_INET, SOCK_STREAM)
try:
self.tcpsoc.connect(self.ADS)
self.SetStatusText("ติดต่อกับ sever ได้แล้ว ".decode("utf-8"))
self.isConnet = True
ss = threading.Timer(30, self.OnRequestServer())
ss.start()
while 1:
self.OnRequestServer()
except:
self.isConnet = False
self.SetStatusText("ไม่สามารถติดต่อกับ sever ได้ ".decode("utf-8"))
def OnRequestServer(self):
#self.t1 = wx.Timer(self)
#self.t1.Start(1000)
data = self.tcpsoc.recv(1024)
if not data:
print "no data from server "
else:
self.temText += "Server : " + str(data) + '\n'
self.txtMsgList.SetValue(self.temText)
#self.t1.Stop()
#del self.t1

By: meledictas on 27 October 2008 - 01:00 #69589

มีสองแบบให้เลือก

1. ใช้ SocketServer ซึ่งเป็นการ implement แบบ thread มีให้เลือกทั้ง TCP (ThreadingTCPServer) และ UDP (ThreadingUDPServer)

2. ใช้ Asynchronous socket handler (asyncore, asynchat ) ตัวนี้ใช้เทคนิค os call ที่ชื่อ select อันนี้มันกว่า ประสิทธิภาพดีกว่าและโค๊ดสะอาดกว่าเพราะเป็น single process

By: khao_lek on 27 October 2008 - 09:03 #69607 Reply to:69589

ขอบคุณครับ
ใช่ SELECT ตัวนี้หรือเปล่าครับคุณ meledictas ถ้าใช่เดี่ยวไปลองดูก่อนครับ

By: meledictas on 27 October 2008 - 10:44 #69617

The select module is a python module for accessing the select() and poll() system core. You can use it but it is unnecessary, there is a high-level implementation. See http://effbot.org/librarybook/asyncore.htm for more detail. :)

By: hereblur on 27 October 2008 - 12:18 #69627

ลองใช้ Twisted ดูดีกว่าครับ จะได้ไม่ต้องมาปวดหัวกับเรื่องพวกนี้