django-channels - Django 通道阻止数据库访问
问题描述
我正在将当前项目从频道 v1 升级到 v3,我有点卡在这里
class MultiplexConsumer(WebsocketConsumer):
def connect(self):
print(11111111, self.scope)
logger.debug("Received new connection request from {}", self.channel_name)
WebSocketsConnection.objects.create(channel_id=self.channel_name, last_pong=datetime.datetime.now())
print(444444444)
self.accept()
print(555555555)
...
class WebSocketsConnection(models.Model):
"""
This model exists because Django channels does not provide a default way to handle user presence.
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
channel_id = models.CharField(max_length=50)
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.deletion.SET_NULL)
last_pong = models.DateTimeField(auto_now_add=True)
type = models.CharField(max_length=30, null=True, blank=True)
data = JSONField(default={})
def ping(self):
channel_layer = get_channel_layer()
async_to_sync(channel_layer.send)(self.channel_id, create_action('API', APIConstants.PING), immediately=True)
def pong(self):
self.last_pong = timezone.now()
self.save()
def get_groups(self):
groups = []
for sub in WebSocketsConnectionSubscription.objects.filter(ws_connection=self):
groups.append(sub.get_group_id())
return groups
def _add_subscription(self, data, sub_type):
try:
sub = WebSocketsConnectionSubscription.objects.get(ws_connection=self, type=sub_type)
sub.data = data
sub.save()
except WebSocketsConnectionSubscription.DoesNotExist:
WebSocketsConnectionSubscription.objects.create(ws_connection=self, data=data, type=sub_type)
它从不打印444444444
,如果我删除WebSocketsConnection
模型创建语句,它会正常运行。有任何想法吗?
我检查了没有附加模型信号WebSocketsConnection
解决方案
我设法找出了问题,该self.channel_name
字段的值太长channel_id = models.CharField(max_length=50)
一旦我将其更改为 100 个字符,它就可以正常工作,但为什么它没有抛出任何错误仍然未知。
更新:消费者不向上传播错误是一个已知问题如何查看渠道消费者引发的异常
推荐阅读
- python - 对于 find 命令,Python 子进程没有按预期工作
- embedded - 为什么在 UART RX FIFO 中提供 FIFO 四分之一满、半满、四分之三满中断?他们的用例是什么?
- mysql - mysql query on an audit table to get latest row where no delete row exists for each user and type
- objective-c - 如何在 Objective C / async 问题中解决这种竞争条件?'索引 1 超出空数组的范围'
- c# - 在 C# ASP.Net MVC 中更新子列表时出现问题
- java - 检索指纹 Blob 在运行时使应用程序崩溃,适用于 Android 的 SQLITE
- sql - Dremio 约会对话
- jquery - webform asp.net 中的可搜索 CheckListBox
- ajax - How to display 3 levels of hierarchical menu in WordPress using "wp_get_nav_menu_items"?
- git - Gitlab 从特定的源分支合并