Created
January 24, 2012 21:57
-
-
Save aparrish/1672967 to your computer and use it in GitHub Desktop.
simple python comet client
This file contains 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
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]) |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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