Socket.gaierror: [Errno -2] Имя или служба неизвестны при попытке установить сокетное соединение с js-клиентом django, запущенным в контейнере docker
1- У меня есть проект django, который запущен в контейнере docker на localhost на порту 8000
2- И у меня есть приложение react, которое запущено на localhost на порту 3000
Я хочу установить сокетное соединение между react app и django с помощью этой команды
react app
const chatSocket = new WebSocket(
'ws://'
// + window.location.host
+ 'localhost:8000'
+ '/ws/room/'
);
chatSocket.onmessage = function(e) {
const data = JSON.parse(e.data);
if (data.message) {
// document.querySelector('#chat-messages').innerHTML += ('<b>' + data.username + '</b>: ' + data.message + '<br>');
} else {
alert('The message is empty!');
}
};
chatSocket.onclose = function(e) {
console.log('The socket close unexpectadly');
};
const handleNewUserMessage = (message) =>{
chatSocket.send(JSON.stringify({
'message': message,
'username': username,
'room_name': roomName
}));
console.log("received");
}
а файлы django выглядят следующим образом:
asgi.py
import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import chat.routing
from .settings import ASGI_APPLICATION
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Irangard.settings')
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
chat.routing.websocket_urlpatterns
)
)
})
routing.py
from django.urls import path
from chat.consumers import ChatConsumer
websocket_urlpatterns = [
path('ws/room/', ChatConsumer.as_asgi()),
]
consumers.py
class ChatConsumer(WebsocketConsumer):
def connect(self):
# self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_name = 'emad12'
self.room_group_name = 'chat_%s' % self.room_name
# Join room
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
# Leave room
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
# Receive message from web socket
def receive(self, text_data):
data = json.loads(text_data)
message = data['message']
username = data['username']
room = data['room_name']
user = User.objects.get(username=username)
async_to_sync(self.save_message)(user, room, message)
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message,
'username': username
}
)
# Receive message from room group
def chat_message(self, event):
message = event['message']
username = event['username']
# Send message to WebSocket
self.send(text_data=json.dumps({
'message': message,
'username': username
}))
@sync_to_async
def save_message(self, user, room, message):
Chat.objects.create(sender=user, room_name=room, message=message)
но я столкнулся с этой ошибкой:
File "/usr/local/lib/python3.9/socket.py", line 954, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
WebSocket DISCONNECT /ws/room/ [172.20.0.1:33238]
WebSocket DISCONNECT /ws/room/ [172.20.0.1:33240]
мой список контейнеров: список контейнеров докера
может ли кто-нибудь помочь мне?
когда я работал в linux все было нормально, но теперь я в windows и столкнулся с ошибкой