twisted預設用的是select()模式,而windows的對檔案描述符(file descriptor)有一定限制,這個限制值是512,在linux的下這個限制為1024, 如果超過這個限制值,就會出現上面的異常。如果要在windows中有更好的表
現,看來得用iocp,而linux下,用epoll則是更合適的方案,而twisted自身就已經支援了這2種模式,看看如何啟用:
windows:
from twisted.internet import iocpreactor
iocpreactor.install()
linux:
from twisted.internet import epollreactor
epollreactor.install()
我的程式是在windows上開發的,最終部署到linux上,所以得寫乙個簡單的判斷來根據系統選擇對應的模式,完整的服務端**調整為:
import os
if os.name!='nt':
from twisted.internet import epollreactor
epollreactor.install()
else:
from twisted.internet import iocpreactor
iocpreactor.install()
from twisted.internet.protocol import factory,protocol
from twisted.internet import reactor
class gamesocket(protocol):
#有新使用者連線至伺服器
def connectionmade(self):
print 'new client'
#客戶端斷開連線
def connectionlost(self,reason):
print 'lost client'
#收到客戶端傳送資料
def datareceived(self, data):
print 'get data:' + str(data)
#向該客戶端傳送資料
self.transport.write('bingo!i got your msg:'+ str(data))
if __name__=='__main__':
f = factory()
f.protocol = gamesocket
reactor.listentcp(5200,f)
print 'server started...'
reactor.run()
mysql連線數問題備份
這是是查詢資料庫當前設定的最大連線數 mysql show variables like max connections variable name value max connections 1000 可以在 etc my.cnf裡面設定資料庫的最大連線數 mysqld max connectio...
redis連線數合理配置 redis連線數配置多少
redis客戶端連線數 redis通過監聽乙個tcp埠或socket的方式接收來自客戶端的連線,當與客戶端建立連線後,redis內部會進行如下操作 1 客戶端socket會被設定為非阻塞模式,因為redis在網路時間處理上採用的是非阻塞多路復用模型 2 然後為這個socket設定tcp nodela...
Tomcat最大連線數問題
tomcat的server.xml中context元素的以下引數應該怎麼配合適 答曰 maxthreads 150 表示最多同時處理150個連線 minsparethreads 25 表示即使沒有人使用也開這麼多空執行緒等待 maxsparethreads 75 表示如果最多可以空75個執行緒,例如...