Есть небольшое приложение на Python, которое принимает соединения от клиентов. Каждое соединение определяется в отдельный поток. Необходимо реализовать связь между двумя рандомными клиентами.
В данном случае, каждому поток присваивается имя, которое берётся из присланных клиентом данных (например, "id1"). После того, как подключились 4 клиента (id1-id4), подключается id5 и в этот момент необходимо отправить сообщение id3 о том, что 5 пришёл. То бишь, if self.getName() == 'id5', то... что?
Или имеет смысл реализовать как-то иначе? Собирать подключения в массив и потом по нему искать того, кому отправить? Как этот вариант реализовать в коде, в таком случае?
import pickle, socket, threading, string
stat = True
class ClientThread(threading.Thread):
def __init__(self, channel, details):
self.channel = channel
self.details = details
threading.Thread.__init__(self)
def run(self):
data = self.channel.recv(1024)
self.setName(data)
print self.getName()
self.channel.close()
print 'Closed connection:', self.details[0]
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind('8.8.8.8', 8088)
server.listen(5)
while stat:
channel, details = server.accept()
ClientThread(channel, details).start()
UPD:
Со вторым вариантом разобрался вроде: в самом начале создаём пустой словарь, а в методе run класса помещаем данные о сокете в этот словарь (conn[self.getName()] = self). Ну а при условии if self.getName() == 'id5' делаем, например, conn['id3'].channel.send('WOW').
Однако, хороший ли это способ? Стоит ли так делать?