Django-channels 实现WebSocket实例
时间: 2024-05-10 16:16:33 浏览: 147
好的,下面是一个简单的 Django-channels 实现 WebSocket 的示例:
首先,安装 Django-channels:
```
pip install channels
```
然后,在 Django 的 settings.py 中添加以下配置:
```python
INSTALLED_APPS = [
...
'channels',
]
ASGI_APPLICATION = 'myproject.routing.application'
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels.layers.InMemoryChannelLayer',
},
}
```
在 myproject 目录下创建一个 routing.py 文件,添加以下内容:
```python
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from myapp.consumers import MyConsumer
application = ProtocolTypeRouter({
'websocket': URLRouter([
path('ws/', MyConsumer.as_asgi()),
]),
})
```
在 myapp 目录下创建一个 consumers.py 文件,添加以下内容:
```python
from channels.generic.websocket import AsyncWebsocketConsumer
import json
class MyConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
await self.send(text_data=json.dumps({
'message': message
}))
```
在你的模板中添加以下 JavaScript 代码,用于连接 WebSocket 和发送消息:
```javascript
const socket = new WebSocket('ws://' + window.location.host + '/ws/');
socket.onmessage = function(e) {
const data = JSON.parse(e.data);
console.log(data);
};
socket.onclose = function(e) {
console.error('Chat socket closed unexpectedly');
};
document.querySelector('#chat-message-input').focus();
document.querySelector('#chat-message-input').onkeyup = function(e) {
if (e.keyCode === 13) { // enter, return
document.querySelector('#chat-message-submit').click();
}
};
document.querySelector('#chat-message-submit').onclick = function(e) {
const messageInputDom = document.querySelector('#chat-message-input');
const message = messageInputDom.value;
socket.send(JSON.stringify({
'message': message
}));
messageInputDom.value = '';
};
```
最后,启动 Django 服务器,打开浏览器访问你的应用程序,进入调试器,打开控制台,你应该可以看到从服务器发送的消息。
阅读全文