欢迎访问宙启技术站
智能推送

从零开始:使用WebsocketConsumer()在Python中创建WebSocket应用

发布时间:2023-12-15 20:03:56

在Python中创建WebSocket应用需要使用Django框架提供的channels库。channels库是一个为Django提供实时特性的第三方库,它支持Websocket、长轮询、HTTP流等。

首先,你需要安装Django和channels库。可以使用以下命令安装:

pip install django channels

接下来,我们创建一个Django项目:

django-admin startproject websocket_app

进入项目目录:

cd websocket_app

为了使用channels库,我们还需要创建一个应用:

python manage.py startapp chat

现在,我们需要在Django的settings.py文件中添加channels库。找到INSTALLED_APPS设置,添加以下两行代码:

INSTALLED_APPS = [
    ...
    'channels',
    'chat',
]

然后,在settings.py中添加channels的设置。找到CHANNEL_LAYERS设置,添加以下代码:

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels.layers.InMemoryChannelLayer',
    },
}

现在,我们创建一个WebSocket消费者类来处理WebSocket连接。在chat目录下创建一个名为consumers.py的文件,并添加以下代码:

from channels.generic.websocket import WebsocketConsumer

class ChatConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def receive(self, text_data):
        self.send(text_data='You said: ' + text_data)

在上面的代码中,我们创建了一个名为ChatConsumer的类,继承自WebsocketConsumer。我们重写了connectreceive方法。

connect方法在建立WebSocket连接时被调用。在这个简单的例子中,我们只是接受连接。

receive方法在接收到客户端发送的消息时被调用。在这个例子中,我们发送了一个回复消息,其中包含客户端发送的消息。

为了让Django知道我们的消费者类存在,我们还需要在chat目录下创建一个名为routing.py的文件,并添加以下代码:

from django.urls import re_path

from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/$', consumers.ChatConsumer.as_asgi()),
]

在上面的代码中,我们创建了一个WebSocket路由,它将WebSocket连接的URL路径/ws/chat/映射到我们的消费者类ChatConsumer

接下来,我们需要更新Django项目的路由配置。打开websocket_app目录下的urls.py文件,并更改内容如下:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('chat/', include('chat.urls')),
]

运行Django开发服务器:

python manage.py runserver

现在,我们WebSocket应用已经准备好接收连接了!

使用浏览器或WebSocket客户端连接到ws://localhost:8000/chat/。发出一条消息并观察我们的WebSocket应用收到并发送的回复消息。

这只是一个简单的示例,你可以根据需要自定义和扩展WebSocket应用。

希望这篇文章对你有帮助!