1

ファイルを読み取ってクライアントに送信する必要がある、学校用の小さな Python サーバー スクリプトを作成しています。

ここで、サーバーがクライアントからの複数の要求に同時に応答する必要があります。現時点では、1 つのクライアントのみを受け入れます...そして、クライアントが応答された直後に、次のクライアントに移動します。

私の先生は、それを達成するために複数のプロセス/スレッドを使用するように私に言いました。私はPythonが初めてなので、これを管理する方法がわかりません。

どうやってやるの?

これが私のコードです:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
while 1:
    print "server ready, waiting..."
    client, address = s.accept() 
    print "recvd client", address 
    data = client.recv(size) 
    if data:

        parametro_data = data.split(' ')
        if(parametro_data[0] == '/GET'):

            theFile = parametro_data[1].replace('\r\n','')

            if os.path.isfile(theFile):
                f = open(theFile, 'r')
                for line in f:
                    client.send(line)
                f.close()
            else:
                client.send("File not exists")

    client.close()
4

2 に答える 2

3
于 2012-12-14T20:24:43.973 に答える
0

説明したモデルでこれを処理するには、実際のファイル送信を行うコードを取り出し、これをスレッド内にカプセル化します。

class HandleClient( threading.Thread ):
 def __init__( self, clientSocket, file_to_read ):
  ...setting up the thread object...
 def run( self ):
  ...sending code...

これによりファイルが送信され、メインの受け入れスレッドが他のクライアントを処理できるようになります。

したがって、クライアント フローは次のようになります。

新しいクライアント接続 -> 接続を受け入れる -> 新しいスレッド オブジェクトを作成し、start()メソッドを呼び出す -> スレッドはファイルをこのクライアントに送信し、接続を閉じます。

スレッドのドキュメント

threading.Thread ドキュメント

また、一度に非常に多くのスレッドしか持つことができず、サーバー機能を提供するフレームワークや、可能であればサーバー機能を提供するフレームワークを使用できないため、スレッドプールも調べます。あなたの場合はファイルの送信。

于 2012-12-14T20:20:48.710 に答える