簡體   English   中英

Django Websocket通信

[英]Django Websocket communication

我有一個Web應用程序,其中已使用本教程實現了Django Channels 2。 聊天正在按照教程進行。

consumer.py

class EchoConsumer(WebsocketConsumer):

    def connect(self):
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'power_%s' % self.room_name

        # Join room group
        async_to_sync(self.channel_layer.group_add)(
            self.room_group_name,
            self.channel_name
        )

        self.accept()

    def disconnect(self, close_code):
        # Leave room group
        async_to_sync(self.channel_layer.group_discard)(
            self.room_group_name,
            self.channel_name
        )

        # Receive message from WebSocket

    def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']

        # Send message to room group
        async_to_sync(self.channel_layer.group_send)(
            self.room_group_name,
            {
                'type': 'chat_message',
                'message': message
            }
        )

        # Receive message from room group

    def chat_message(self, event):
        message = event['message']

        # Send message to WebSocket
        self.send(text_data=json.dumps({
            'message': message
        })) 

routing.py

websocket_urlpatterns = [
    re_path(r'^ws/power/(?P<room_name>[^/]+)/$', consumers.EchoConsumer),
]

但是現在,我想實現一個簡單的python客戶端,該客戶端使用Web套接字將消息發送到Django Channels應用程序。 一個簡單的python websocket,但是我無法連接。

my-websocket.py

def on_message(ws, message):
    print (message)

def on_error(ws, error):
    print (error)

def on_close(ws):
    print ("### closed ###")
    # Attemp to reconnect with 2 seconds interval
    time.sleep(2)
    initiate()

def on_open(ws):
    print ("### Initiating new websocket connectipython my-websocket.pyon ###")
    def run(*args):
        for i in range(30000):
            # Sending message with 1 second intervall
            time.sleep(1)
            ws.send("Hello %d" % i)
        time.sleep(1)
        ws.close()
        print ("thread terminating...")
    _thread.start_new_thread(run, ())

def initiate():
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://localhost:8000/power/room/",
        on_message = on_message,
        on_error = on_error,
        on_close = on_close)
    ws.on_open = on_open

    ws.run_forever()

if __name__ == "__main__":
    initiate()

我收到的錯誤是由於錯誤

-----------------------
--- response header ---
[WinError 10054] An existing connection was forcibly closed by the remote host
### closed ###
-----------------------
--- response header ---
[WinError 10054] An existing connection was forcibly closed by the remote host
### closed ###
--- request header ---
GET /power/room/ HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:8000
Origin: http://localhost:8000
Sec-WebSocket-Key: uTsGsGA+SVCdCFymJT8/IQ==
Sec-WebSocket-Version: 13

ws = websocket.WebSocketApp("ws://localhost:8000/power/room/",更改為ws = websocket.WebSocketApp("ws://localhost:8000/ws/power/room/",

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM