def main(): reactor.listenTCP(8000, EchoApp()) num = cpu_count() if prefork(num): exit() reactor.run()
from gevent import fork from prefork import prefork, cpu_count def connection(env, start): ws = env["wsgi.websocket"] send, rcv = ws.send, ws.receive while True: send(rcv()) if __name__ == "__main__": addr = "0.0.0.0", 8000 server = WSGIServer(addr, connection, handler_class=WebSocketHandler, log=None) # bind socket if hasattr(server, "pre_start"): server.pre_start() else: server.init_socket() num = cpu_count() print "Gevent + gevent-websocket (%s workers)" % (num + 1) prefork(num, fork=fork) # gevent needs special fork try: server.serve_forever() except KeyboardInterrupt: server.stop()
from tornado.web import Application from tornado.websocket import WebSocketHandler from tornado.httpserver import HTTPServer from tornado.netutil import bind_sockets from logging import getLogger, CRITICAL from prefork import prefork, cpu_count class EchoApp( Application ): def __init__(self): Application.__init__( self, [("/", WSHandler)] ) class WSHandler( WebSocketHandler ): def allow_draft76( self ): return False def on_message( self, message ): self.write_message( message, binary=True ) if __name__ == "__main__": getLogger().setLevel( CRITICAL ) server = HTTPServer( EchoApp() ) sockets = bind_sockets( 8000, backlog=768 ) num = cpu_count() print "Tornado (%s workers)" % num if prefork( num ): exit() server.add_sockets( sockets ) IOLoop.instance().start()