Django频道 - 握手&连接,但不执行websocket.connect函数

时间:2017-07-26 13:09:27

标签: websocket connection django-channels

我正在开发一个django项目,其中包含涉及不同应用的频道。第一个应用程序(从传感器接收数据)拥有自己的消费者和路由,以及第二个应用程序(更新登录用户列表)。

在第一个应用程序中,一切正常。

在第二个应用程序中,握手已完成且连接已建立,但未执行与websocket.receive链接的功能。

from channels.routing import route, route_class
from channels.staticfiles import StaticFilesConsumer
from users.consumer import ws_connect, ws_disconnect

channel_routing = [
    route('websocket.connect', ws_connect, path=r'^/users/lobby/'),
    ...
]

ws_connect

import json
from channels import Group
from channels.handler import AsgiHandler
from channels.auth import channel_session_user,
    channel_session_user_from_http, channel_session

@channel_session_user_from_http
def ws_connect(message):
    print('test')

print('test')的{​​{1}}永远不会被执行。此外,我在javascript中使用的结尾也不重要。

ws_connect

javascript的var ws = new WebSocket('ws://127.0.0.1:8000/users/lobby/'); ws.onopen = function() { console.log('connect'); ws.send('connect'); } 将与ws的{​​{1}}或.../users/lobby/相关联。

感谢你提供任何暗示!

1 个答案:

答案 0 :(得分:0)

由于我显然需要50点声望才能发表评论我只是要回答,即使我不确定这是否适合您。

在复制由制作频道的人制作的github multichat项目的部分时,我遇到了同样的问题。

我的问题显然是我错过拼写错误拼写路由,因此它没有调用我为该路由设置的正确功能。

所以我的建议是,你到处检查路线,看看你是否搞砸了。我个人只在错误检查时检查了我的APP路由,但它在我的项目文件夹中,我弄乱了我的路由。

另一件可能引发此问题的事情是,您的应用中只有一个路由,但不在主文件夹中。在这种情况下,您需要将其他应用程序路由包含在您想要的路径中,就像查看一样:

from channels import include


channel_routing = [
        include("crypto_chat.routing.websocket_routing", path=r"^/chat/stream/$"),
        include("crypto_chat.routing.chat_routing"),
]

应用路由:

from channels import route
from .consumers import  ws_connect, ws_receive, ws_disconnect, user_offline, user_online, chat_send

websocket_routing = [
    route("websocket.connect", ws_connect),
    route("websocket.receive", ws_receive),
    route("websocket.disconnect", ws_disconnect),
]

chat_routing = [
    route("chat.receive", chat_send, command="^send$"),
    route("chat.receive", user_online, command="^online$"),
    route("chat.receive",user_offline, command="^offline$"),
]

如果这没有帮助那么我建议你转到github频道页面查看示例并比较两者。请记住,该项目可能是由更频繁版本的频道制作的(也许还有django)。

https://github.com/andrewgodwin/channels-examples

希望它有所帮助,正如我所说,我会发表评论,但是从我的代表那里我显然不能......