2015-08-20 4 views
-1

Мне интересно, как я могу создать простой сервер сокетов в Python 2.7, который может обрабатывать и добавлять/принимать сразу несколько клиентов за раз. Я не хочу использовать Twisted или threading, ни библиотеки; просто Python и сокеты. Я посмотрел вокруг SoF (stackoverflow - это что-то такое?) И нашел людей, задающих один и тот же вопрос, но не получивших ясного ответа.Python Simple Multiple Client Socket Server

Если вам интересно, зачем мне это нужно, это потому, что я хочу создать простой форвардер данных, который пересылает данные клиента на другой сервер. Я думаю, что очень простой пример, показывающий мне, что Server.py, Client1.py и Client2.py - это то, что мне нужно. Опять же, просто очень простой пример без потоков, без скрученных, без библиотек.

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

+0

Если вы хотите, чтобы сервер обрабатывал несколько клиентов за один раз, вы не сможете избежать многопоточности. – codebox

+0

Если я сделал это на PHP, я чертовски уверен, что могу это сделать в Python ! –

+1

Итак, когда сервер передает запрос от одного клиента, а второй клиентский запрос приходит, что вы хотите? Если у вас есть только один поток, то любые последующие запросы, которые прибудут, должны будут сидеть в очереди и ждать, чтобы их обрабатывали по одному - это можно было бы сделать так, но ваши пользователи будут вас ненавидеть. – codebox

ответ

0

Рассмотрите возможность использования asyncio (доступно для python 3.3 и более поздних версий).

Asyncio это новый стандарт питон для однопоточных параллельного программирования:

Этот модуль предоставляет инфраструктуру для написания однопоточных параллельного кода с использованием сопрограмм, мультиплексирование ввода/доступ вывода через сокеты и других ресурсов, работает сеть клиентов и серверов, а также других связанных с ним примитивов.

документация содержит несколько примеров:


Если вы не готовы перейти на Python 3, вы можете использовать trollius, portage asyncio для python 2. Существует несколько различий между этими двумя модулями, как указано в documentation:

  • заменить asyncio с Trollius (или использование импортного Trollius как asyncio)
  • заменить выход из ... с выходом из (...)
  • заменить выход из [] с выходом Из (нет)
  • в сопрограммах, замените Рез возврата с подъемным Return (разреш)

Другие решения для однопоточных параллельного программирования на Python 2.7:

  • gevent: сопрограмма на основе Python сетей библиотека, которая использует greenlet.
  • asyncore: встроенная асинхронная библиотека сокетов (echo server example).
+0

Я использую Python 2.7, и я планирую сохранить его таким образом. Проверьте редактирование, которое я собираюсь сделать в OP –

+0

@RoyalScripters Edited. – Vincent