Данные, полученные на стороне клиента, не работают? - PullRequest
1 голос
/ 10 июля 2010

Я реализовал простой сценарий сервер-клиент, например:

Сервер:

class Server(Protocol):

  def connectionMade(self):
    while True:
      self.transport.write('a')

Клиент

class Client(Protocol):
  def dataReceived(self, data):
    print data

То, что я ожидал, было напечатано на бесконечном множестве строк в окне клиента, но на самом деле ничего не появилось. Когда я заменяю цикл while в Server конечным циклом, он работает. Таким образом, кажется, что функция connectionMade должна быть прервана до того, как все данные могут появиться на стороне клиента? Я не прав?

1 Ответ

0 голосов
/ 10 июля 2010

Ты прав. Пока connectionMade что-то делает, данные еще не были записаны в сокет . transport.write(x) не означает «немедленно записать« x »в сокет», это означает «когда в сокете есть свободное буферное пространство, напишите« x »в него».

Пример, как вы его сформулируете:

def connectionMade(self):
  while True:
    self.transport.write('a')

просто выделяет бесконечно большой буфер, полный символов 'a', выделяя память до тех пор, пока он не выйдет из строя.

...