-
-
Save aparrish/1672967 to your computer and use it in GitHub Desktop.
import email.utils # for rfc2822 formatted current timestamp | |
import requests | |
class CometClient(object): | |
def __init__(self, last_modified=None): | |
if last_modified is None: | |
self.last_modified = email.utils.formatdate() | |
else: | |
self.last_modified = last_modified | |
self.etag = 0 | |
def listen(self, url): | |
while True: | |
self._get_request(url) | |
def _get_request(self, url): | |
try: | |
resp = requests.get(url, headers={ | |
'If-None-Match': str(self.etag), | |
'If-Modified-Since': str(self.last_modified)}) | |
self.last_modified = resp.headers['Last-Modified'] | |
self.etag = resp.headers['Etag'] | |
self.handle_response(resp.content) | |
except requests.exceptions.Timeout: | |
pass | |
def handle_response(self, response): | |
print response | |
if __name__ == '__main__': | |
import sys | |
comet = CometClient() | |
comet.listen(sys.argv[1]) |
I guess I should have been more specific: this code doesn't work with websockets—it's for long-poll style Comet connections provided by, e.g., the nginx http push module (http://pushmodule.slact.net/). here are some good leads on Python websocket clients: http://stackoverflow.com/questions/3142705/is-there-a-websocket-client-implemented-for-python
Thanks for your prompt reply. Actually I am doing comet, not ws. I have tried the ws://
schema just because this is what the jquery part of the application is trying while establishing the conection to tornado. But I am pretty confident that the tornado server is doing comet, not web sockets (well, I am just reasonably confident). Could you provide an example of how you are using your script in your particular situation? Maybe some output would also be useful.
I have opened a StackOverflow question regarding this issue. You can see it here: http://stackoverflow.com/questions/11141618/simple-comet-client-in-python
I have tried to use this in different ways, but without success. I am connecting to a tornado comet server.
So how can I use this?