使用 Python sanic 类库实现 Websocket 通信
使用Python的Sanic库实现WebSocket通信
WebSocket是一种在客户端和服务器之间进行双向通信的协议。使用WebSocket,可以让客户端和服务器之间实时地交换数据,而不需要频繁的HTTP请求。Sanic是一个基于Python的异步Web框架,它提供了简单、快速且可扩展的方式来构建高性能的Web应用程序。下面我们将使用Sanic库来实现WebSocket通信。
首先,我们需要安装Sanic库。可以使用以下命令来安装Sanic:
pip install sanic
安装完成后,我们可以开始编写代码。
from sanic import Sanic
from sanic.response import html
from sanic.websocket import WebSocketProtocol
app = Sanic(__name__)
@app.route('/')
async def index(request):
return html('<h1>WebSocket Example</h1>')
@app.websocket('/ws')
async def websocket(request, ws):
while True:
message = await ws.recv()
await ws.send('Received: ' + message)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000, protocol=WebSocketProtocol)
上述代码首先导入了所需的Sanic类和函数,创建了一个Sanic实例,并定义了一个基本的HTTP路由,其中返回一个简单的HTML页面。接下来,我们通过装饰器`@app.websocket('/ws')`来定义WebSocket路由。`async def websocket(request, ws)`是WebSocket处理函数,其中`request`参数表示HTTP请求对象,`ws`参数表示WebSocket对象。
在WebSocket处理函数中,我们使用一个无限循环来接收客户端发送的消息,然后将消息添加前缀后再发送回客户端。在这个例子中,我们只是简单地回显消息。
最后,在`if __name__ == '__main__'`条件下,我们使用`app.run()`函数来启动Sanic应用,指定监听的主机和端口,并使用`protocol=WebSocketProtocol`参数来指定使用WebSocket协议。
为了运行上述代码,将其保存为`app.py`文件,并通过以下命令来运行应用:
python app.py
现在,我们的WebSocket服务器已经准备就绪。你可以在浏览器中访问`http://localhost:8000/`来查看WebSocket示例页面。
在示例页面中,我们可以使用JavaScript来与WebSocket服务器进行通信。以下是一个简单的JavaScript代码示例,用于连接到WebSocket服务器并发送消息:
const socket = new WebSocket('ws://localhost:8000/ws');
socket.onopen = function() {
console.log('WebSocket connection established.');
socket.send('Hello, Server!');
};
socket.onmessage = function(event) {
console.log('Received: ' + event.data);
};
socket.onclose = function(event) {
console.log('WebSocket connection closed with code: ' + event.code);
};
以上代码使用`new WebSocket('ws://localhost:8000/ws')`来创建一个WebSocket连接,然后通过`onopen`事件处理程序发送消息,通过`onmessage`事件处理程序接收消息,通过`onclose`事件处理程序处理连接关闭事件。
这是一个简单的使用Python Sanic库实现WebSocket通信的示例。你可以根据需要扩展代码和处理不同的消息。希望这篇文章对你理解如何使用Sanic库来构建WebSocket应用程序有所帮助。