Python ConnectionResetError:[Errno 54]对等Django通道重置连接

Python ConnectionResetError:[Errno 54]对等Django通道重置连接,python,django,websocket,django-channels,Python,Django,Websocket,Django Channels,显示连接重置错误 路径匿名用户 [28/Sep/2020 12:43:30]“GET/chat/aman/aman_indresh/HTTP/1.1”200 1920 路径匿名用户 找不到:/ws/chat/aman\u indresh/ [28/Sep/2020 12:43:30]“GET/ws/chat/aman_indresh/HTTP/1.1”404 2211 处理来自('127.0.0.1',54816'的请求时发生异常 回溯(最近一次呼叫最后一次): 文件“/usr/local/ci

显示连接重置错误

路径匿名用户

[28/Sep/2020 12:43:30]“GET/chat/aman/aman_indresh/HTTP/1.1”200 1920

路径匿名用户

找不到:/ws/chat/aman\u indresh/

[28/Sep/2020 12:43:30]“GET/ws/chat/aman_indresh/HTTP/1.1”404 2211

处理来自('127.0.0.1',54816'的请求时发生异常 回溯(最近一次呼叫最后一次): 文件“/usr/local/cillar”/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/socketserver.py”,第650行,进程中请求线程 自我完成请求(请求、客户地址) 文件“/usr/local/cillar”/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/socketserver.py”,第360行,在finish_请求中 self.RequestHandlerClass(请求、客户端地址、self) 文件“/usr/local/cillar”/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/socketserver.py”,第720行,在init self.handle() 文件“/Users/indresh/Documents/Projects/tiktok/server/env/lib/python3.8/site packages/django/core/servers/basehttp.py”,第174行,在handle中 self.handle_one_请求() 文件“/Users/indresh/Documents/Projects/tiktok/server/env/lib/python3.8/site packages/django/core/servers/basehttp.py”,第182行,在handle\u one\u请求中 self.raw_requestline=self.rfile.readline(65537)

文件 “/usr/本地/酒窖/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/socket.py”,第669行,在readinto中 返回自我。将袜子重新放入(b)

ConnectionResetError:[Errno 54]对等方重置连接 Consumers.py

import json
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer

class ChatConsumer(WebsocketConsumer):
    def connect(self):
        # print(self.channel_layer)
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'chat_%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']
        sender_name = text_data_json['sender_name']

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

    # Receive message from room group
    def chat_message(self, event):
        message = event['message']
        sender_name = event['sender_name']

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

        }))
from django.urls import re_path

from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer),
]
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat_socket.routing

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat_socket.routing.websocket_urlpatterns
        )
    ),
})
routing.py

import json
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer

class ChatConsumer(WebsocketConsumer):
    def connect(self):
        # print(self.channel_layer)
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'chat_%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']
        sender_name = text_data_json['sender_name']

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

    # Receive message from room group
    def chat_message(self, event):
        message = event['message']
        sender_name = event['sender_name']

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

        }))
from django.urls import re_path

from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer),
]
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat_socket.routing

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat_socket.routing.websocket_urlpatterns
        )
    ),
})
room.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Room</title>
</head>
<body>
    <textarea id="chat-log" cols="100" rows="20"></textarea><br>
    <input id="chat-message-input" type="text" size="100"><br>
    <input id="chat-message-submit" type="button" value="Send">
    {{ room_name|json_script:"room-name" }}
    {{ your_name|json_script:"your-name" }}
    <h2>{{your_name}}</h2>
    <script>
        const roomName = JSON.parse(document.getElementById('room-name').textContent);
        const yourName = JSON.parse(document.getElementById('your-name').textContent);

        const chatSocket = new WebSocket(
            'ws://'
            + window.location.host
            + '/ws/chat/'
            + roomName
            + '/'
        );

        chatSocket.onmessage = function(e) {
            const data = JSON.parse(e.data);
            console.log(e);
            document.querySelector('#chat-log').value += (data.sender_name+": "+data.message + '\n');
        };

        chatSocket.onclose = function(e) {
            console.log(e);
            console.error('Chat socket closed unexpectedly');
        };

        document.querySelector('#chat-message-input').focus();
        document.querySelector('#chat-message-input').onkeyup = function(e) {
            if (e.keyCode === 13) {  // enter, return
                document.querySelector('#chat-message-submit').click();
            }
        };

        document.querySelector('#chat-message-submit').onclick = function(e) {
            const messageInputDom = document.querySelector('#chat-message-input');
            const message = messageInputDom.value;
            chatSocket.send(JSON.stringify({
                'message': message,
                'sender_name': yourName,
            }));
            messageInputDom.value = '';
        };
    </script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Rooms</title>
</head>
<body>
    Your Name?<br>
    <input id="your-name-input" type="text" size="100"><br>
    Your chat room name?<br>
    <input id="room-name-input" type="text" size="100"><br>
    <input id="room-name-submit" type="button" value="Enter">

    <script>
        document.querySelector('#room-name-input').focus();
        document.querySelector('#room-name-input').onkeyup = function(e) {
            if (e.keyCode === 13) {  // enter, return
                document.querySelector('#room-name-submit').click();
            }
        };

        document.querySelector('#room-name-submit').onclick = function(e) {
            var roomName = document.querySelector('#room-name-input').value;
            var yourName = document.querySelector('#your-name-input').value;
            if(yourName == null){
                yourName = Math.floor(Math.random() * 100000000);
            }
            window.location.pathname = '/chat/' + yourName + '/' + roomName + '/';
        };
    </script>
</body>
</html>

聊天室


{{room_name}json_脚本:“room name”} {{your_name}json_脚本:“your name”} {{你的名字} const roomName=JSON.parse(document.getElementById('room-name').textContent); const yourName=JSON.parse(document.getElementById('your-name').textContent); const chatSocket=新的WebSocket( 'ws://' +window.location.host +“/ws/chat/” +室名 + '/' ); chatSocket.onmessage=函数(e){ const data=JSON.parse(e.data); 控制台日志(e); document.querySelector(“#聊天日志”).value+=(data.sender_name+”:“+data.message+'\n”); }; chatSocket.onclose=函数(e){ 控制台日志(e); console.error('聊天套接字意外关闭'); }; document.querySelector(“#聊天信息输入”).focus(); document.querySelector(“#聊天信息输入”).onkeyup=function(e){ 如果(e.keyCode==13){//输入,返回 document.querySelector(“#聊天信息提交”)。单击(); } }; document.querySelector(“#聊天信息提交”).onclick=function(e){ const messageInputDom=document.querySelector(“#聊天信息输入”); const message=messageInputDom.value; 发送(JSON.stringify({ “消息”:消息, “发件人姓名”:您的姓名, })); messageInputDom.value=''; };
index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Room</title>
</head>
<body>
    <textarea id="chat-log" cols="100" rows="20"></textarea><br>
    <input id="chat-message-input" type="text" size="100"><br>
    <input id="chat-message-submit" type="button" value="Send">
    {{ room_name|json_script:"room-name" }}
    {{ your_name|json_script:"your-name" }}
    <h2>{{your_name}}</h2>
    <script>
        const roomName = JSON.parse(document.getElementById('room-name').textContent);
        const yourName = JSON.parse(document.getElementById('your-name').textContent);

        const chatSocket = new WebSocket(
            'ws://'
            + window.location.host
            + '/ws/chat/'
            + roomName
            + '/'
        );

        chatSocket.onmessage = function(e) {
            const data = JSON.parse(e.data);
            console.log(e);
            document.querySelector('#chat-log').value += (data.sender_name+": "+data.message + '\n');
        };

        chatSocket.onclose = function(e) {
            console.log(e);
            console.error('Chat socket closed unexpectedly');
        };

        document.querySelector('#chat-message-input').focus();
        document.querySelector('#chat-message-input').onkeyup = function(e) {
            if (e.keyCode === 13) {  // enter, return
                document.querySelector('#chat-message-submit').click();
            }
        };

        document.querySelector('#chat-message-submit').onclick = function(e) {
            const messageInputDom = document.querySelector('#chat-message-input');
            const message = messageInputDom.value;
            chatSocket.send(JSON.stringify({
                'message': message,
                'sender_name': yourName,
            }));
            messageInputDom.value = '';
        };
    </script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Rooms</title>
</head>
<body>
    Your Name?<br>
    <input id="your-name-input" type="text" size="100"><br>
    Your chat room name?<br>
    <input id="room-name-input" type="text" size="100"><br>
    <input id="room-name-submit" type="button" value="Enter">

    <script>
        document.querySelector('#room-name-input').focus();
        document.querySelector('#room-name-input').onkeyup = function(e) {
            if (e.keyCode === 13) {  // enter, return
                document.querySelector('#room-name-submit').click();
            }
        };

        document.querySelector('#room-name-submit').onclick = function(e) {
            var roomName = document.querySelector('#room-name-input').value;
            var yourName = document.querySelector('#your-name-input').value;
            if(yourName == null){
                yourName = Math.floor(Math.random() * 100000000);
            }
            window.location.pathname = '/chat/' + yourName + '/' + roomName + '/';
        };
    </script>
</body>
</html>

聊天室
你叫什么名字?

您的聊天室名称?

document.querySelector(“#房间名称输入”).focus(); document.querySelector(“#房间名称输入”).onkeyup=function(e){ 如果(e.keyCode==13){//输入,返回 document.querySelector(“#房间名称提交”)。单击(); } }; document.querySelector(“#房间名称提交”).onclick=function(e){ var roomName=document.querySelector(“#room name input”).value; var yourName=document.querySelector(“#yourName input”).value; 如果(yourName==null){ yourName=Math.floor(Math.random()*100000000); } window.location.pathname='/chat/'+yourName+'/'+roomName+'/'; };
我遇到了相同的问题
ConnectionResetError:[Errno 54]由对等方重置连接

这个问题是关于尝试通过development server提供静态文件,而
debug设置为False
,只有在设置文件中将
debug
设置为
True
时,development server才能提供静态文件

在您的设置文件中,替换

DEBUG = False


现在重新启动开发服务器,它现在应该可以工作了。

增强问题标题和描述可能会有很大帮助。它无法连接到web套接字服务器。。。它抛出“ConnectionResetError:[Errno 54]由对等方重置连接”