Несколько одновременных сетевых соединений - сервер Telnet, Python

Что вы хотите сделать, это составить список и добавить к нему b.

my_vals = []
for x in range(len(df['Days'])):
    if df['Days'][x]>0 and df['Days'][x]<=30: 
        b = df['Days'][x]
        my_vals.append(b)
my_vals

В вашем коде вы меняете b при каждой итерации, и поэтому в нем хранятся только самые последние значения. В будущем, когда вы пытаетесь сохранить несколько значений, делайте это в другом типе данных.

16
задан SpleenTea 22 April 2009 в 08:03
поделиться

7 ответов

Реализовано в витая :

from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor

class SendContent(Protocol):
    def connectionMade(self):
        self.transport.write(self.factory.text)
        self.transport.loseConnection()

class SendContentFactory(Factory):
    protocol = SendContent
    def __init__(self, text=None):
        if text is None:
            text = """Hello, how are you my friend? Feeling fine? Good!"""
        self.text = text

reactor.listenTCP(50000, SendContentFactory())
reactor.run()

Тестирование:

$ telnet localhost 50000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello, how are you my friend? Feeling fine? Good!
Connection closed by foreign host.

Серьезно, когда дело доходит до асинхронной сети, витая - это путь. Он обрабатывает несколько соединений в однопоточном однопроцессном подходе.

16
ответ дан 30 November 2019 в 17:16
поделиться

You need some form of asynchronous socket IO. Have a look at this explanation, which discusses the concept in low-level socket terms, and the related examples which are implemented in Python. That should point you in the right direction.

4
ответ дан 30 November 2019 в 17:16
поделиться

For a really easy win implement you solution using SocketServer & the SocketServer.ThreadingMixIn

have a look a this echo server example it looks quite similar to what you're doing anyway: http://www.oreillynet.com/onlamp/blog/2007/12/pymotw_socketserver.html

3
ответ дан 30 November 2019 в 17:16
поделиться

If you're up for a bit of a conceptual challenge, I'd look into using twisted.

Your case should be trivial to implement as a part of twisted. http://twistedmatrix.com/projects/core/documentation/howto/servers.html

2
ответ дан 30 November 2019 в 17:16
поделиться

Если вы хотите сделать это на чистом питоне (без витая), вам нужно сделать некоторые потоки. Если вы не видели это раньше, проверьте: http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf

на странице 5/6 - это пример, который очень актуален;)

1
ответ дан 30 November 2019 в 17:16
поделиться

Сначала купите книги Комера по программированию TCP / IP .

В этих книгах Comer предоставит несколько альтернативных алгоритмов для серверов. Существует два стандартных подхода.

  • Поток-на-запрос.

  • Процесс-на-запрос.

Вы должны выбрать один из этих двух и реализовать его.

В потоке на каждый сеанс telnet имеет место. отдельный поток в вашем общем приложении.

В process-per вы разбиваете каждый сеанс telnet на отдельный подпроцесс.

Вы обнаружите, что процесс-на-запрос намного, намного проще обрабатывается в Python, и как правило, это обеспечивает более эффективное использование вашей системы.

Поток на запрос хорош для вещей, которые приходят и уходят быстро (например, HTTP-запросы). В Telnet есть длительные сеансы, в которых стоимость запуска подпроцесса не влияет на производительность.

1
ответ дан 30 November 2019 в 17:16
поделиться

Поздно для ответа, но с единственными ответами Twisted или Thread (ой), я хотел добавить ответ для MiniBoa.

http://code.google.com/p/miniboa/

Twisted великолепен, но это довольно крупный зверь, который, возможно, не лучшее введение в однопоточное асинхронное программирование Telnet. MiniBoa - это легкая асинхронная однопоточная реализация Python Telnet, изначально разработанная для грязи, что идеально подходит для вопроса OP.

4
ответ дан 30 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: