我使用套接字編程在Python中創建一個簡單的聊天應用程序無限連接,我需要我的插座接受這個不像「socket.listen(100)」,這是僅限於100連接的無限量請解釋我該怎麼處理大量的連接?接受插座
Q
接受插座
3
A
回答
3
與listen()
給定的數字是積壓隊列的大小 - 一個暗示到待決請求的數目,不活動的請求的數目。
您會經常看到用於積壓的5
值參數 - 這是歷史數據。 Berkeley套接字的早期版本有一個「特徵」,其中任何大於5的值都給出了5。這是很久以前固定的,但它仍然不是一個數字,你需要太多的擔心 - 記住,這只是一個提示。
如果積壓超過,給客戶端的實際錯誤通常是全部ECONNREFUSED
,但舊系統曾經有特定的積壓錯誤。
在許多系統上積壓悄悄地截取到SOMAXCONN
。
1
你想有一個接受()循環,它只是接受()新的連接,並開始一個新的線程來處理每一個。每當有人試圖連接時,它立即接受它們並將它們添加到連接列表中。
每個連接一個線程,用長超時,無論你想你的會話空閒超時被讀取。如果超時過期,則關閉套接字並退出線程。
如果服務器用完了文件描述符,這會如果有足夠的併發連接,接受()將開始與相應的errno失敗:在這種情況下,你只是忽略它,並不斷循環。也許你會在這種情況下減少空閒超時時間,然後在接受再次開始工作時將其放回原處。
你正在看問題有點不對。使用服務器端套接字,您可以接受到同一套接字的連接,然後由其他進程/線程處理。
#
# Setup socket and other handling stuff here
#
while True:
conn = sock.accept()
thread.start_new_thread(handler, (conn,))
根據您系統的內存,最大套接字數將會有一個實際的限制。
見http://docs.python.org/2/library/socketserver.html。我認爲最後幾個例子(在Asynchronous Mixins下)非常接近你想要實現的。
相關問題
- 1. 如何接受超時插座
- 2. 服務器插座 - 接受白名單
- 3. 爪哇插座接受隊列長度
- 4. 如何終止插座接受阻塞
- 5. Linux插座接受總是失敗
- 6. Python的插座只接受本地連接
- 7. 連接到插座
- 8. C++ Linux的接受()阻塞插座關閉
- 9. 只接受特定IP/MAC/ethtype包在一個插座
- 10. 在Windows 7上接受插座花費的時間比第二
- 11. C++插座不能接受超過21845個字節
- 12. Linux的插座接受不能被阻止
- 13. 插座接受方式ID一樣,而真正的
- 14. C插座的接受函數在Xcode中不工作
- 15. 如何登錄龍捲風插座接受時間?
- 16. 我如何發送接受插座的功能作爲參數
- 17. Flex插座到插座
- 18. 插座與插座集合
- 19. 將PC與插座連接
- 20. 中斷插座連接
- 21. PHP插座/ TCP套接字
- 22. 無法連接iPad插座?
- 23. 多次連接到插座
- 24. VBA插座連接2010
- 25. 可連接插座的Android
- 26. 連接插座給了ConnectionRefusedError
- 27. 插座連接android到iphone
- 28. 連接到與IPAddress.Any插座
- 29. 藍牙插座連接
- 30. 無法連接插座
你有無限的帶寬爲您的無限連接? –
是的,我有一個無限帶寬的VPS。 – Matarata
「socket.listen」的參數是尚未被「接受」的未決連接的最大數目。它不限制已建立的連接數量。 – jasonharper