2012-04-09 2 views
1

私はtwistedを使用して複数の接続を受け入れるシンプルなサーバーを作成しました。接続しているクライアントの数を数えたいと思います。これは実際には(論理的な)clientConnectionMade()を使用して工場で行っているが、カウンタの値を更新しない、本当に私はそれが私の間違いであるか分からない。私は少し助けていただきありがとうございます。Pythonを使用したシンプルなサーバーのサービス対象クライアントのカウンタ+ツイスト

マイServerのコード:(もhttp://bpaste.net/show/26789/中)

import socket 
import datetime 
from twisted.internet import reactor, protocol 
from twisted.internet.protocol import Factory, Protocol 

class Echo(protocol.Protocol): 

def connectionMade(self): 
    print "New client connected" 

def dataReceived(self, data): 
    print "Msg from the client received" 
    if data == "datetime": 
     now = datetime.datetime.now() 
     self.transport.write("Date and time:") 
     self.transport.write(str(now)) 
    elif data == "clientes": 
     self.transport.write("Numbers of clients served: %d " % (self.factory.numClients)) 
    else: 
     self.transport.write("msg received without actions") 

class EchoFactory(Factory): 

protocol = Echo 

    def __init__(self): 
     self.numClients = 0 

    def clientConnectionMade(self): 
     self.numClients = self.numClients+1 

def main(): 
factory = EchoFactory() 
factory.protocol = Echo 
reactor.listenTCP(9000,factory) 
reactor.run() 

# this only runs if the module was *not* imported 
if __name__ == '__main__': 
main() 

doesntのちょうどカウンター 'numClients' を更新し、私はなぜ知らないdoesntの、いずれかのエラーを示しています。

おかげで(あなたがself.numClientsをインクリメント)

+0

これはコンパイルされますか?あなたのスペーシングは正しくありません... – Ben

答えて

1

clientConnectionMadeはnot a valid method on the Factory classあるので、フレームワークによって呼び出されることはありません。

働くだろうあなたのEcho.connectionMade()メソッドの内部からself.factory.numClients + = 1を呼び出す:

class Echo(protocol.Protocol): 
    def connectionMade(self): 
     print "New client connected" 
     self.factory.numClients += 1 

あなたはまた、類似した何かをするあなたの工場のbuildProtocol()メソッドをオーバーライドすることができます。

+0

コネクションメイドが一度だけ呼び出されているので、fcloneは1に更新され、そこに残ります。実際、それは私の最初のコードだったし、クライアントの数え方が工場になければならないと思う。 – boogieman

関連する問題