Столкнулся с такой проблемой. При домашнем сервере данный код отлично работает, сервер получает сообщения и на них отвечает. При удаленном сервере уже не работает. Сервер получает сообщения и отвечает, но до клиента они уже не доходят. Если отправлять сообщения не через сокет Игрока, а через тот же слушающий сокет (последнюю строчку меняем на UDPSock.sendto(w.data,p.addr)) - все получается на ура. в чем проблема, подскажите. И еще вопрос в догонку. Сколько сообщений в секунду может обработать сокет? имеет ли смысл слушать несколько портов (делать несколько входящих сокетов) или несколько исходящих сокетов? или все можно повесить на слушающий и отвечающий сокет? Кол-во сообщений ожидается большое - порядка 1000-5000 тысяч в секундну
UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip = ‘192.168.0.7’
port = 3030
listen_addr = (ip,port)
UDPSock.bind(listen_addr)
class Player:
def __init__(self, addr):
self.addr = addr
self.UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while 1:
data,addr = UDPSock.recvfrom(1024)
message = MessageReader(data)
messageId = message.readInt()
if messageId == 10:
arrayOfPlayers.append(Player(addr))
print('new player {}'.format(addr))
if messageId == 11:
text = message.readString()
num = message.readInt()
w = MessageWriter()
w.writeInt(11)
w.writeInt(1234567)
for p in arrayOfPlayers:
if p.addr == addr:
p.UDPSock.sendto(w.data,p.addr)