2016-06-07 41 views
0

我是新來的模塊套接字,我正在學習如何實現它。我目前有這個基本的服務器寫的。Python socketserver或帶線程套接字

import socket    

s = socket.socket()   
host = "Some IP" 
port = 12345     
s.bind((host, port))   

print "Setting up server on", host + ":" + str(port) 

s.listen(5)     

while True: 
    c, addr = s.accept()  

    print 'Got connection from', addr 
    c.send('Thank you for connecting.') 
    print c.recv(1024) 

c.close() 

但是,我意識到這臺服務器一次只能處理一個客戶端。爲了進一步培訓,我想同時處理多個客戶。所以我做了一個研究,並遇到了圖書館SocketServer。我還聽說過線程化常規套接字模塊的方法,因此每個新連接都會創建一個新線程。我找到的信息還不夠。請幫我理解我發現的這兩種方法和使用哪一種方法之間的區別。

在此先感謝。

+0

你看過[zeromq](http://zeromq.org/)嗎?它爲套接字操作/服務器寫入添加了一個非常有用的層。 Python綁定可通過[pyzmq](https://github.com/zeromq/pyzmq)(pip install pyzmq)獲得。它也快速發展。 –

+0

謝謝我會看看它,但我現在更喜歡使用標準模塊,因爲我目前正在學習它。 –

回答

1

套接字庫是非常低級的,你必須自己實現大多數事情。

SocketServer更高級。它在內部使用套接字庫,並提供了一個簡單的接口,允許您一次處理多個客戶端,而且您不必擔心使用套接字時涉及的所有低級別內容。

看看這裏的例子,並將它們與您自己的代碼進行比較。你可能會看到不同之處。 https://docs.python.org/2/library/socketserver.html#examples

+0

但基本上他們做同樣的事情對嗎?多線程+套接字和serversocket。 –

+0

是的,套接字模塊可以用於客戶端和服務器。 SocketServer只能用於服務器,但通常比插座模塊更容易使用。 – user2746752