您的位置:

对于fastapi错误WebSocketException(code=status.WS_1008_POLICY_VIOLATION)的解决

  发布时间:2023-01-29 10:30:01
报错的原因FastAPI会抛出异常,当WebSocket连接发生策略违规时会发生。这个错误代码表示策略违规, 意思是客户端发送的消息与服务器的策略不符,如果你是使用FastAPI构建WebSocket应用,并在服务器端设置了一些限制,则客户端发送的消息不符合这些限制就会导致这个错误。如何解决解决异常的方法取决于错误的具体原因。总之,解决异常的关键是要找出错误的原因,然后采取相应的措施来解决它。

报错的原因

FastAPI会抛出WebSocketException(code=status.WS_1008_POLICY_VIOLATION)异常,当WebSocket连接发生策略违规时会发生。这可能是因为服务器检测到客户端发送了不符合协议规定的消息。这个错误代码1008表示策略违规, 意思是客户端发送的消息与服务器的策略不符,如果你是使用FastAPI构建WebSocket应用,并在服务器端设置了一些限制,则客户端发送的消息不符合这些限制就会导致这个错误。

如何解决

解决WebSocketException(code=status.WS_1008_POLICY_VIOLATION)异常的方法取决于错误的具体原因。通常可以采取以下步骤来解决这个问题:

1. 检查客户端发送的消息是否符合协议规定。

2. 检查服务器端设置的策略是否正确。

3. 确认客户端发送的消息是否符合服务器端的策略。

4. 如果发现客户端发送的消息不符合服务器端的策略, 可以在服务器端添加相应的错误处理代码来处理这个错误, 如断开websocket连接,或者返回特定的错误信息给客户端

5. 如果上述步骤都没有解决问题,可以检查错误信息,看看它是否能提供有用的提示来定位问题。

总之,解决WebSocketException(code=status.WS_1008_POLICY_VIOLATION)异常的关键是要找出错误的原因,然后采取相应的措施来解决它。

使用例子

是的,下面是一个简单的例子:


from fastapi import FastAPI
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi.websockets import WebSocket, WebSocketDisconnect

app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")

@app.get("/ws")
async def get_ws(websocket: WebSocket):
    await websocket.accept()
    try:
        while True:
            data = await websocket.receive_text()
            if data=='ping':
                await websocket.send_text("pong")
            else:
                raise WebSocketDisconnect(code=1008, message='Invalid message')
    except WebSocketDisconnect as e:
        print(f'WebSocketDisconnect {e.code} {e.message}')

在上面这个例子中,我们定义了一个websocket路由,里面的逻辑是如果收到的数据是'ping'就返回'pong',否则抛出WebSocketDisconnect异常,在except里处理这个异常。

如果你还有其他问题,请随时联系我。