comparison web/templog.py @ 559:d563e14da813

fix server side long polling
author Matt Johnston <matt@ucc.asn.au>
date Tue, 09 Jun 2015 23:29:11 +0800
parents d16afb5b5cd9
children 205809a8872f 9be8464e4295
comparison
equal deleted inserted replaced
558:9f659ece4e63 559:d563e14da813
161 def get_settings(): 161 def get_settings():
162 response.set_header('Cache-Control', 'no-cache') 162 response.set_header('Cache-Control', 'no-cache')
163 req_etag = request.headers.get('etag', None) 163 req_etag = request.headers.get('etag', None)
164 if req_etag: 164 if req_etag:
165 # wait for it to change 165 # wait for it to change
166 if not log.fridge_settings.wait(req_etag, timeout=LONG_POLL_TIMEOUT): 166 # XXX this is meant to return True if it has been woken up
167 response.status = 304 167 # but it isn't working. Instead compare epochtag below.
168 return "Nothing happened" 168 log.fridge_settings.wait(req_etag, timeout=config.LONG_POLL_TIMEOUT)
169
170 contents, epoch_tag = log.fridge_settings.get()
171 if epoch_tag == req_etag:
172 response.status = 304
173 return "Nothing happened"
169 174
170 response.set_header('Content-Type', 'application/json') 175 response.set_header('Content-Type', 'application/json')
171 contents, epoch_tag = client_settings.get()
172 return json.dumps({'params': contents, 'epoch_tag': epoch_tag}) 176 return json.dumps({'params': contents, 'epoch_tag': epoch_tag})
173 177
174 @bottle.get('/<filename:re:.*\.js>') 178 @bottle.get('/<filename:re:.*\.js>')
175 def javascripts(filename): 179 def javascripts(filename):
176 response.set_header('Cache-Control', "public, max-age=1296000") 180 response.set_header('Cache-Control', "public, max-age=1296000")