Клиент-серверное программирование на python?

Чтобы объявить тип, его размер должен быть известен. Вы можете переслать объявление указателя на тип или typedef указатель на этот тип.

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

Изменить: j_random_hacker добавляет важную квалификацию к этому ответу, в основном, что размер должен знать используйте тип, но объявление вперед может быть сделано, если нам нужно знать только тип exists , чтобы создать указатели или ссылки на тип. Поскольку ОП не показывал код, но жаловался, что он не будет компилироваться, я предположил (возможно, правильно), что ОП пытался использовать тип, а не просто ссылаться на него.

10
задан Pratik Deoghare 24 June 2012 в 10:30
поделиться

3 ответа

Порождение нового потока для каждого соединения является действительно плохим проектным решением. Что происходит, если Вы поражены большим количеством соединений?

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

Следующий текст из документации Python:

Существует только два способа иметь программу на единственном процессоре, делают “больше чем одну вещь за один раз”. Многопоточное программирование является самым простым и самым популярным способом сделать это, но существует другая совсем другая техника, которая позволяет Вам иметь почти все преимущества многопоточности, на самом деле не используя несколько потоков. Это действительно только практично, если Вашей программой является в основном связанный ввод-вывод. Если Ваша программа является связанным процессором, то приоритетные запланированные потоки, вероятно, в чем Вы действительно нуждаетесь. Сетевые серверы редко являются связанным процессором, как бы то ни было.

И если это - связанный случай сервера процессора. Вы могли всегда оставлять другой процесс/поток, чтобы сделать часть процессора. Продолжение:

Если Ваша операционная система поддерживает избранный системный вызов в своей библиотеке I/O (и почти все делают), то можно использовать его для манипулирования несколькими каналами передачи сразу; выполнение другой работы, в то время как ввод-вывод происходит в “фоне”. Хотя эта стратегия может казаться странной и сложной, особенно сначала, во многих отношениях легче понять и управлять, чем многопоточное программирование.

Таким образом вместо того, чтобы использовать потоки, используйте не блокирующийся ввод/вывод: соберите сокеты в списке и используйте цикл событий с select.select для знания, какой сокет имеет данные для чтения. Сделайте это в единственном потоке.

Вы могли выбрать Python, асинхронной сетевой платформе нравится скрученный делать это для Вас. Это сохранит Вас много головных болей. Код Twisted был улучшен в течение многих лет и касается некоторых угловых случаев, Вы займете время ведущему устройству.

Править: Любые существующие асинхронные библиотеки IO (как Скрученный) являются кодом Python. Вы, возможно, записали это сами, но это было уже записано для Вас. Я не вижу, почему Вы не пользовались бы одной из тех библиотек и написали бы Ваш собственный худший код вместо этого, так как Вы - новичок. В Networing IO трудно разобраться.

20
ответ дан 3 December 2019 в 17:22
поделиться

Я не уверен, что понимаю вопрос, но не звоню close() если Вы не хотите закрывать соединение...

3
ответ дан 3 December 2019 в 17:22
поделиться

Для примера клиента сохранение открытого соединения TCP и использование знакомый протокол, посмотрите на источник telnetlib модуля. (извините, кто-то еще должен будет ответить на Ваши вопросы поточной обработки.)

Пример сервера, который сохраняет соединение TCP открытым, находится в источнике для модуля SocketServer (любая стандартная установка Python включает источник).

0
ответ дан 3 December 2019 в 17:22
поделиться
Другие вопросы по тегам:

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