代码之家  ›  专栏  ›  技术社区  ›  anon01

如果没有html/js,如何捕获fastapi websocket消息?

  •  0
  • anon01  · 技术社区  · 3 年前

    Fastapi文档包括 websocket example 通过html/javascript接收数据的。将脚本另存为 main.py uvicorn main:app --reload ,示例按预期工作:

    from fastapi import FastAPI, WebSocket
    from fastapi.responses import HTMLResponse
    
    app = FastAPI()
    
    html = """
    <!DOCTYPE html>
    <html>
        <head>
            <title>Chat</title>
        </head>
        <body>
            <h1>WebSocket Chat</h1>
            <form action="" onsubmit="sendMessage(event)">
                <input type="text" id="messageText" autocomplete="off"/>
                <button>Send</button>
            </form>
            <ul id='messages'>
            </ul>
            <script>
                var ws = new WebSocket("ws://localhost:8000/ws");
                ws.onmessage = function(event) {
                    var messages = document.getElementById('messages')
                    var message = document.createElement('li')
                    var content = document.createTextNode(event.data)
                    message.appendChild(content)
                    messages.appendChild(message)
                };
                function sendMessage(event) {
                    var input = document.getElementById("messageText")
                    ws.send(input.value)
                    input.value = ''
                    event.preventDefault()
                }
            </script>
        </body>
    </html>
    """
    
    
    @app.get("/")
    async def get():
        return HTMLResponse(html)
    
    
    @app.websocket("/ws")
    async def websocket_endpoint(websocket: WebSocket):
        await websocket.accept()
        while True:
            data = await websocket.receive_text()
            await websocket.send_text(f"Message text was: {data}")
    

    如何修改此示例以将websocket消息写入文件而不使用任何html/js?我想用python直接访问传入的数据(text/json),但我无法直接捕获它。如有任何其他信息/澄清,敬请谅解。

    0 回复  |  直到 3 年前
        1
  •  1
  •   lsabi    3 年前

    所以,可能在评论中我没有很好地解释我自己。

    热释光;博士

    服务器已经存在,您只需要连接到它。

    while True 循环。这些可能会消失,你可能会改变他们的东西像 await websocket.send_text("text")

    import asyncio
    import websockets
    
    
    async def hello():
        uri = "ws://localhost:8000/ws"
        async with websockets.connect(uri) as websocket:
            await websocket.send("Hello world!")
            res = await websocket.recv()
            print(res)
    
    asyncio.get_event_loop().run_until_complete(hello())
    

    我不确定您需要将哪些消息写入文件,但上面的代码片段正在工作,并且是您所需内容的基础。