websocket - django 频道的 websocket 握手失败
问题描述
编辑:@Ken4scholars 评论后更正
我有以下消费者在连接后立即失败
消费者.py
from channels.generic.websocket import AsyncJsonWebsocketConsumer
#...
class ListGeneratedTokensByFileConsumer(AsyncJsonWebsocketConsumer):
stop = False
async def websocket_connect(self,event):
await self.accept()
self.stop = False
async def websocket_receive(self,event):
await self.send_json({"text":"received","accept": True})
await self.send_tokens_list()
async def websocket_disconnect(self,event):
self.stop = True
async def send_tokens_list(self):
some_path = "..."
while self.stop == False:
await asyncio.sleep(2)
the_message = {}
if os.path.isfile("some_file.json")):
with open(os.path.join(some_path ,"some_file.json"),'r') as new_tok:
the_message = json.load(new_tok)
if not the_message:
print("waiting...")
else:
await self.send_json(the_message)
await self.close()
它总是抛出错误:ERR_CONNECTION:RESEST
并且 websocket 与 code 断开连接1006
。这对于 django-channels 的最新变化似乎很熟悉,但由于我在 websocket 打开后发送文本并从消费者发送回消息,所以它应该可以解决问题。还是有什么问题?
路由.py
url(r'^myapp/sub_path/(?P<pk>\d+)/sub_sub_path/',ListGeneratedTokensByFileConsumer)
js中的websocket端点是:
.js
var loc = window.location;
var wsStart = "ws://";
if (loc.protocol == "https:") {
wsStart = "wss://";
}
var endpoint = wsStart + loc.host + loc.pathname + "sub_sub_path" + "/";
有关信息,使用 channels-redis==2.3.2, channels==2.3.0, asgiref==3.2.2, daphne==2.3.0, django==2.0.8
解决方案
推荐阅读
- python - SqlAlchemy filter_by 与包含列表的 kwargs
- arrays - 匹配时从数组中推送对象中的项目
- php - 我可以在飞行中获得 PHP 响应大小吗?
- node.js - Mongo for each 不做这个功能
- android - 如何修复应用程序未在我的移动设备上安装已编译的 apk,使用生成 react-native 的签名 APK
- c# - 将 DLL 导入从 c# 移植到 c++
- reactjs - 如何在事件处理程序中访问 Material UI 主题?
- node.js - 使用 ejs 模板时出现服务器错误
- javascript - 如果复选框被选中 ONLOAD,显示文本框,如果不是,不显示文本框
- ios - 如何在 UICollectionView 上设置高度/保持 UICollectionView 的高度不会在模拟器中扩展