Как обнаружить незаметное отключение Twisted в Linux? - PullRequest
4 голосов
/ 09 июня 2010

Я написал сервер на основе Twisted, и я столкнулся с проблемой, некоторые клиенты отключены не изящно. Например, пользователь вытаскивает сетевой кабель.

Некоторое время клиент в Windows отключается (вызывается connectionLost, и он также записывается в Twisted). А на стороне Linux-сервера мое соединение теряется, никогда не запускается. Даже он пытается записать данные клиенту, когда соединение потеряно. Почему Twisted не может обнаружить эти не изящные отключения (даже записать данные на клиент) в Linux? Как заставить Twisted обнаруживать не изящные разъединения? Поскольку функция Twisted не может обнаружить неприличную, на моем сервере много пользователей-зомби.

---- Обновление ----

Я подумал, что это может быть особенностью сокета unix-like os, так, каково поведение socket в unix-like для обработки подобной ситуации?

Спасибо. Виктор Лин.

Ответы [ 2 ]

3 голосов
/ 09 июня 2010

Вы описываете поведение TCP-соединений в ненадежной сети. Twisted просто демонстрирует это поведение: в конце концов, когда вы устанавливаете TCP-соединение с Twisted, это не более чем TCP-соединение.

Вы ошибаетесь, когда говорите, что обратный вызов connectionLost не вызывается, даже если вы пытаетесь отправить данные через него. Через две минуты основное TCP-соединение исчезнет, ​​и Twisted сообщит вам об этом, позвонив connectionLost .

Если вам нужно обнаружить это состояние быстрее, чем это, вы можете реализовать свои собственные таймауты, используя реактор.callLater .

1 голос
/ 10 июня 2010

После того, что сказал Жан-Поль, если вам нужно более детальное управление TCP-соединением, просто используйте реактор. CallLater.У нас есть именно такая реализация на торговой платформе Twisted / wxPython, и она работает без проблем.Вы также можете настроить поведение ReconnectingClientFactory, чтобы добиться результатов, которые, как я понимаю, вы ищете.

...