Created
March 7, 2010 07:05
-
-
Save clemesha/324224 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#from here: http://pastebin.com/GZ5UdEDZ | |
from twisted.web import server, resource | |
from twisted.application import service, internet | |
from twisted.internet import reactor | |
from twisted.internet.defer import Deferred | |
from twisted.python import log, logfile | |
from twisted.python.log import ILogObserver | |
import psyco | |
psyco.full() | |
class ClientManager: | |
clients = [] | |
def registerClient(self, client): | |
self.clients.append(client) | |
def broadcastMessage(self, message): | |
for client in self.clients: | |
del client.headers['server'] | |
client.setHeader('content-type','text/plain;charset=utf-8'); | |
client.write(message) | |
client.finish() | |
self.clients = [] | |
class CometServer(resource.Resource): | |
isLeaf = False | |
def __init__(self): | |
resource.Resource.__init__(self) | |
self.registerChildren() | |
def registerChildren(self): | |
self.putChild( 'subscribe', Subscribe() ) | |
self.putChild( 'publish', Publish() ) | |
def getChild( self, path, req ): | |
if path == '': | |
return self | |
else: | |
return resource.Resource.getChild( self, path, req ) | |
class Subscribe(resource.Resource): | |
isLeaf = True | |
def render_GET(self, req): | |
clientManager.registerClient(req) | |
return server.NOT_DONE_YET | |
class Publish(resource.Resource): | |
isLeaf = True | |
def render_GET(self, req): | |
del req.headers['server'] | |
req.setHeader('content-type','text/plain;charset=utf-8'); | |
clientManager.broadcastMessage(req.args['message'][0]) | |
return "ok" | |
clientManager = ClientManager() | |
application = service.Application("App") | |
application.setComponent(ILogObserver, lambda _: None) | |
class KeepAliveSite(server.Site): | |
def buildProtocol(self, addr): | |
channel = server.Site.buildProtocol(self, addr) | |
transport = channel.transport | |
transport.setTcpKeepAlive(1) | |
transport.socket.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 200) | |
sys.puts(transport) | |
return channel | |
site = server.Site(CometServer()) | |
service = internet.TCPServer(8001, site, backlog = 128) | |
service.setServiceParent(application) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment