10

ドキュメント サイトの指示に従っていますが、echo の例で行き詰まりました。Websocket は正しく作成され、サーバーに接続されていますが、サーバーに何かを送信しても応答がありません (例ではソケットに送信したのと同じメッセージを含むアラートウィンドウが表示されるはずですが、console.logのアラートを変更しましたが、表示されません)、何が間違っていますか?

settings.pyで:

INSTALLED_APPS = {
    ...
    'channels',
    'myapp',
    ...
} 

...
# Channels settings
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "myapp.routing.channel_routing",
    },
}

routing.py:

from channels.routing import route
from myapp.consumers import *

channel_routing = [
    route("websocket.receive", ws_receive),
]

consumer.pyで:

def ws_receive(message):
    # ASGI WebSocket packet-received and send-packet message types
    # both have a "text" key for their textual data.
    message.reply_channel.send({
        "text": message.content['text'],
    })

asgi.py で

import os
from channels.asgi import get_channel_layer

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")

channel_layer = get_channel_layer()

次に実行します: python manage.py runserver、ブラウザでサーバーの URL に移動し、コンソールに次のように入力します。

socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
    alert(e.data);
}
socket.onopen = function() {
    socket.send("hello world");
}

繰り返しますが、この時点で警告ウィンドウ (または console.log メッセージ) が表示されるはずですが、何も表示されません。

応答

私が行ったリクエストのステータスは保留中です(ただし、ここを読み、最初のコメントではそれが正常であると述べています)

リクエスト

サーバー出力は次のようになります。

サーバー出力

ブラウザーで websocket を介して何かを送信しようとするたびに、サーバーは CONNECT を出力するだけですが、js コンソールからのログは表示されません。

編集: ブラウザーで websocket を echo.websocket.org に対してテストしたところ、期待どおりの答えが得られました。

テストウェブソケット

4

1 に答える 1