Я пытаюсь написать сервер, используя витую структуру и хотели бы получить данные несколько разTwisted получает данные в DataReceived()
class Echo(Protocol):
def connectionMade(self):
print " got connection from : " + str(self.transport.getPeer())
def dataReceived(self, data):
'''
get the client ip
'''
if(len(data)>40):
'''
initial setup message from the client
'''
client_details = str(self.transport.getPeer())#stores the client IP as a string
i = client_details.find('\'')#process the string to find the ip
client_details = client_details[i+1:]
j = client_details.find('\'')
client_ip = client_details[:j]
'''
Extract the port information from the obtained text
'''
data = data.split('@')
port1 = data[0]
port2 = data[1]
port3 = data[2]
if int(data) == 1:
method1(client_ip,port1)
if int(data) == 2:
method2(client_ip,port2)
Мой вопрос: method1 и method2 называются только тогда, когда он получает сообщение от клиента с соответствующими целыми данными в нем. Есть ли способ, которым я могу ждать на клиенте для получения данных внутри метода dataReceived(), или я должен просто делать это последовательно в самом методе dataReceived()?
так будет сохранен порядок данных и будут установлены переменные для использования для последующих входящих сообщений? Я не пробовал это так, но сейчас проверю. – hld619
технически «переменные» (вещи, установленные как 'x = 1') не будут; «атрибуты» (вещи, установленные как 'self.x = 1'). Это основная проблема Python, но не имеет ничего общего с Twisted. – Glyph
Когда вы говорите, что «dataReceived не может рассчитывать на получение полного сообщения», возникает еще одно сомнение, если одновременно подключено несколько клиентов, будут ли сообщения, отправленные клиентами, рассматриваться как один поток или будут отличаться? – hld619