Skip to content

Instantly share code, notes, and snippets.

@rgov
Created January 14, 2020 23:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rgov/e53f9c410ac69cfc9ad8eb466f743c8f to your computer and use it in GitHub Desktop.
Save rgov/e53f9c410ac69cfc9ad8eb466f743c8f to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
'''
This is intended to be a simple example of listening on two sockets simultaneously
using Python's http.server and socketserver modules.
'''
import http.server
import select
import socketserver
latest_nmea = []
class GPSMessageHandler(socketserver.DatagramRequestHandler):
def handle(self):
msg = self.rfile.readline().rstrip()
latest_nmea.append(msg)
if len(latest_nmea) > 5:
del latest_nmea[0]
class HTTPRequestHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
self.wfile.write(b'<ul>' + b''.join(b'<li>' + m for m in latest_nmea) + b'</ul>')
if __name__ == '__main__':
gpsd = socketserver.UDPServer(('', 22335), GPSMessageHandler)
httpd = http.server.HTTPServer(('', 8080), HTTPRequestHandler)
while True:
readable, _, _ = select.select([httpd, gpsd], [], [])
for server in readable:
server.handle_request()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment