simple chart server in python using select function

  • 54
  • 0
  • 2016-09-12

要實現類似聊天室的功能 程式碼必須要有非同步的功能 在python當中有好幾個方法可以達成需要的目標, 以前有嘗試過multithread的方式(怎麼用還需要再重新練習) 今天(0911)在網路上看到利用select的function同樣可以達到一樣的目標,而且似乎還有其他的優點! 所以先嘗試了第一個版本(先確定select可以順利執行),完整個程式在後續幾個版本繼續讓它完整!

 

#encoding=UTF-8
import socket
import select

host=''
port=9009
socket_list=[]

serversock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
serversock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
serversock.bind((host,port))
serversock.listen(10)

socket_list.append(serversock)
while 1:
	readytoread,readytowrite,readytoerror = select.select(socket_list,[],[],0)
	
	for sock in readytoread:
		if sock == serversock:
			clientsock,addr = sock.accept()
			socket_list.append(clientsock)
			print "client (%s,%s)" % addr
		else:
			try:
				data = sock.recv(4096)
				if data:
					print data
				else:
					socket_list.remove(sock)
			except:
				print "error!"
				continue

 

By Jsy