#python #sockets #client #twisted
#python #сокеты #клиент #twisted
Вопрос:
Я пытаюсь написать программу, к которой подключаются клиенты, пока сервер все еще может отправлять команды всем клиентам. Я использую «искаженное» решение. Как я могу это сделать? Вот код, который у меня есть на данный момент (я понимаю, что Twisted уже использует неблокирующие сокеты):
import threading
print 'threading.'
def dock():
try:
from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor
import currentTime
print '[*]Imports succesful.'
except:
print '[/]Imports failed.'
#Define the class for the protocol
class Master(Protocol):
command = raw_input('> ')
def connectionMade(self):
print 'Slave connected.'
print currentTime.getTime() #Print current time
#self.transport.write("Hello")
def connectionLost(self, reason):
print 'Lost.'
#Assemble it in a "factory"
class MasterFactory(Factory):
protocol = Master
reactor.listenTCP(8800, MasterFactory())
#Run it all
reactor.run()
def commandline():
raw_input('>')
threading.Thread(target=dock()).start()
threading.Thread(target=commandline()).start()
Ответ №1:
Поскольку вы уже используете twisted, вам также следует использовать его для консольной части, вместо использования raw_input
в потоке.
Цикл событий Twisted может отслеживать изменения в любом файловом дескрипторе, включая стандартный ввод, поэтому вы можете получать обратные вызовы на основе событий при введении новой строки — он работает асинхронно без необходимости в потоках.
Я нашел этот пример интерактивной консоли в приложении twisted, возможно, вы сможете его использовать.
Комментарии:
1. @alex luoqq.blogspot.com.br/2012/01 /…
2.
.com.br
содержит нечитаемые примеры кода для меня. Но веб-архив www.oluyede.org/blog/2008/08/31/twisted-interactive-console работает