当前位置:   article > 正文

FastAPI(56)- 使用 Websocket 打造一个迷你聊天室

fastapi websocket

背景

  • 在实际项目中,可能会通过前端框架使用 WebSocket 和后端进行通信
  • 这里就来详细讲解下 FastAPI 是如何操作 WebSocket 的

模拟 WebSocket 客户端

  1. #!usr/bin/env python
  2. # -*- coding:utf-8 _*-
  3. """
  4. # author: 小菠萝测试笔记
  5. # blog: https://www.cnblogs.com/poloyy/
  6. # time: 2021/10/5 5:26 下午
  7. # file: 46_websocket.py
  8. """
  9. import uvicorn
  10. from fastapi import FastAPI, WebSocket
  11. from fastapi.responses import HTMLResponse
  12. app = FastAPI()
  13. html = """
  14. <!DOCTYPE html>
  15. <html>
  16. <head>
  17. <title>小菠萝聊天室</title>
  18. </head>
  19. <body>
  20. <h1>小菠萝聊天室</h1>
  21. <form action="" onsubmit="sendMessage(event)">
  22. <input type="text" id="messageText" autocomplete="off"/>
  23. <button>Send</button>
  24. </form>
  25. <ul id='messages'>
  26. </ul>
  27. <script>
  28. // 加载页面,自动创建一个 WebSocket 连接
  29. var ws = new WebSocket("ws://localhost:8080/ws");
  30. // 收到消息
  31. ws.onmessage = function(event) {
  32. // 获取输入框的值
  33. var messages = document.getElementById('messages')
  34. // 创建一个 li 元素
  35. var message = document.createElement('li')
  36. // 接收 event 的 data
  37. var content = document.createTextNode(event.data)
  38. message.appendChild(content)
  39. messages.appendChild(message)
  40. };
  41. // 发送消息方法
  42. function sendMessage(event) {
  43. var input = document.getElementById("messageText")
  44. ws.send(input.value)
  45. input.value = ''
  46. event.preventDefault()
  47. }
  48. </script>
  49. </body>
  50. </html>
  51. """
  52. # 返回一段 HTML 代码给前端
  53. @app.get("/")
  54. async def get():
  55. return HTMLResponse(html)
  56. @app.websocket("/ws")
  57. async def websocket_endpoint(websocket: WebSocket):
  58. # 1、ws 连接
  59. await websocket
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/863400
推荐阅读
相关标签
  

闽ICP备14008679号