在我的《python高階程式設計和非同步io程式設計》中我講解了socket程式設計,這裡貼一段用socket實現聊天室的功能的原始碼,因為最近工作比較忙,後期我會將這裡的**細節分析出來,目前先把**貼上。大家自行研究執行一下。
server端:
"""
server select
"""importsys
importtime importsocket importselectimportlogging fromqueue importqueueimportqueue g_select_timeout =10classserver(object):def__init__(self,host='0.0.0.0',port=3333,timeout=2,client_nums=10):self.__host =host self.__port =port self.__timeout =timeout self.__client_nums =client_nums self.__buffer_size =1024self.server =socket.socket(socket.af_inet,socket.sock_stream)self.server.setblocking(false)self.server.settimeout(self.__timeout)self.server.setsockopt(socket.sol_socket,socket.so_keepalive,1)# keepaliveself.server.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)# 埠復用server_host =(self.__host,self.__port)try:self.server.bind(server_host)self.server.listen(self.__client_nums)except:raiseself.inputs =[self.server]# select 接收檔案描述符列表self.outputs =# 輸出檔案描述符列表self.message_queues ={}# 訊息佇列self.client_info ={}defrun(self):while
poll實現I O多路復用
poll函式原型 引數說明 fds 是乙個struct pollfd結構型別的陣列,用於存放需要檢測其狀態的socket描述符 每當呼叫這個函式之後,系統不會清空這個陣列,操作起來比較方便 特別是對於socket連線比較多的情況下,在一定程度上可以提高處理的效率 這一點與select 函式不同,呼叫...
poll函式實現多路復用
struct pollfd 每乙個pollfd結構體指定了乙個被監視的檔案描述符,可以傳遞多個結構體,指示poll 監視多個檔案描述符。每個結構體的events域是監視該檔案描述符的事件掩碼,由使用者來設定這個域。revents域是檔案描述符的操作結果事件掩碼。核心在呼叫返回時設定這個域。event...
Linux IO多路復用
一.select 函式 include include include int select int n,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout fd clr int fd,fd set set f...