How to have Sanic respond with http and ws?

前端 未结 1 1686
离开以前
离开以前 2021-01-16 15:07

I have the following code for a Sanic hello world based off combining different endpoints here:

  • https://sanic.readthedocs.io/en/latest/sanic/response.html
相关标签:
1条回答
  • 2021-01-16 15:36

    Using 0.0.0.0 as your endpoint within your client html doesn't make any sense and you're not using SSL so you want to use ws:// rather than wss://. In other words,

    from sanic import Sanic
    from sanic import response
    from sanic.websocket import WebSocketProtocol
    
    app = Sanic()
    
    @app.websocket('/feed')
    async def feed(request, ws):
        while True:
            data = 'hello!'
            print('Sending: ' + data)
            await ws.send(data)
            data = await ws.recv()
            print('Received: ' + data)
    
    @app.route('/html2')
    async def handle_request(request):
      return response.html("""<html><head><script>
             var exampleSocket = new WebSocket("ws://" + location.host + '/feed');
             exampleSocket.onmessage = function (event) {
             console.log(event.data)};</script></head><body><h1>Hello socket!</h1><p>hello</p></body></html>""")
    
    app.run(host="0.0.0.0", port=8000)
    
    0 讨论(0)
提交回复
热议问题