Витой сервер для нескольких клиентов - PullRequest
10 голосов
/ 05 января 2011

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

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

Andesay

Ответы [ 4 ]

12 голосов
/ 05 января 2011

Скажем, вы хотите запустить сервер, принимающий клиентские подключения, через порт 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).Удачи!

7 голосов
/ 05 января 2011

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

  1. Учебник Дейва Петиколы по кручению
  2. Искаженное представление Итамара Штулл-Трейринга
2 голосов
/ 06 января 2011

Этот учебник является отличной (лучшей) отправной точкой для изучения процесса написания витого сервера с нуля: http://twistedmatrix.com/documents/current/core/howto/tutorial/index.html

0 голосов
/ 05 января 2011

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

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

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