今天做python的同學問了我一個問題,一個客戶端可以開兩個或者多個客戶端連接嗎?
答案是:可以的
推理一:
我們知道一個websocket服務端可以與多個客戶端建立websocket連接,比方聊天室的實現。
推理二:
同一個客戶端開兩個websocket連接或者多個客戶端連,其實效果是一樣的,既然多個客戶端可以連,為什么一個客戶端開多個連接會連不了呢?
推理三:
我們知道在服務端是單線程的情況下,一個客戶端連接了服務端,只要連接沒有斷開,其他客戶端連接服務端就會處於阻塞狀態,那如果服務端要實現多客戶端可以連接要么是多線程實現或者協程實現和兩個結合實現,所以我去查看了gevent websocket socket服務的實現果然不出所料是基於協程實現的,在壓力較大時再開新線程,所以效率特別高能支持高並發,可查看我博客從IO的角度深入理解Select、Poll、Epoll的區別推理,詳細解釋了。
結論:
所以基於以上推理和源碼解析,我們知道websocket能支持多客戶端或者說多連接是因為其服務是基於多線程和協程實現的,既然支持多連接那么它是來自一個客戶端或者或者多個客戶端是一樣一樣的。