Hi zipxing,

You don't mention the interpreter. Is it CPython? What kind of results do you get trying it on PyPy?

Also, you don't need to specify epollreactor. Recent versions of twisted will automagically choose the appropriate backend. I fixed this and some other cleanups and got:

----
from time import clock
from twisted.internet import protocol, reactor
from twisted.protocols import basic

class MeasuringEchoProtocol(basic.LineReceiver):
    MEASUREMENT_INTERVAL = 1000

    def lineReceived(self, data):
        self.factory.requests += 1
        if self.factory.requests % self.MEASUREMENT_INTERVAL == 0:
            print "RPS: {0}".format(self.factory.requests / clock())

        self.transport.write(data)



class ServerFactory(protocol.ServerFactory):
    protocol = MeasuringEchoProtocol

    def __init__(self):
        self.requests = 0



def main():
    reactor.listenTCP(9976, ServerFactory())
    clock()
    reactor.run()

if __name__ == '__main__':
    main()
----

Keep in mind that due to setup time few requests get handled right when it starts, so the server RPS will take some time to balance out. On my wimpy laptop on battery power, that was around 420.274404782.

cheers
lvh