Скрученный сервер для нескольких клиентов

Я хочу написать сервер, который может принимать несколько клиентов в python (twisted). Я уже хорошо знаком с программированием сокетов с помощью стандартного модуля сокетов python, но здесь возникает проблема. Я думаю, что скрученный действительно трудно попасть, и я прочитал некоторые уроки об этом. Но вещь, которую я действительно не могу найти, - это простой сервер сокетов, который принимает несколько соединений. Может ли кто-нибудь помочь? Если я пропустил какую-то ценную информацию в Интернете, пожалуйста, дайте мне знать, потому что я вытягиваю свои волосы.

Любая помощь очень ценится,

Andesay

Ответ 1

Скажем, вы хотите запустить сервер, принимающий клиентские соединения на порте 9000:

from twisted.internet import reactor, protocol

PORT = 9000

class MyServer(protocol.Protocol):
    pass

class MyServerFactory(protocol.Factory):
    protocol = MyServer

factory = MyServerFactory()
reactor.listenTCP(PORT, factory)
reactor.run()

И если вы хотите протестировать подключение к этому серверу, вот код для клиента (для запуска в другом терминале):

from twisted.internet import reactor, protocol

HOST = 'localhost'
PORT = 9000

class MyClient(protocol.Protocol):
    def connectionMade(self):
        print "connected!"

class MyClientFactory(protocol.ClientFactory):
    protocol = MyClient

factory = MyClientFactory()
reactor.connectTCP(HOST, PORT, factory)

reactor.run()

Вы заметите, что код очень похож, только мы используем Factory для сервера и ClientFactory для клиента, а серверы должны прослушивать (listenTCP), пока клиент должен подключиться (connectTCP). Удачи!

Ответ 2

Я думаю, вы не поняли суть искривленного. Если вы создаете сервер скрученных сокетов, он по умолчанию доступен через несколько клиентов. Я бы предложил следующие учебные пособия, а затем прочитать скрученную документацию. Напишите небольшие фрагменты, как указано в этих уроках, чтобы понять, что на самом деле происходит.

Ответ 4

Twisted - потрясающая структура, но это (как часто) подразумевает, что для легкой вещи это может быть довольно сложно...

Вот этот факт. Вам нужно написать класс, который в случае необходимости использует Resource, LineReceiver, а затем присоединить его к реактору с помощью

reactor.connectTCP(<HOST>, <PORT>, istance_of_your_class)