Я хочу разработать довольно простую клиент-серверную программу.
одна программа читает XML (или любые данные) и отправляет их на сервер, который, в свою очередь, немного манипулирует им и в конечном итоге записывает его на диск.
Дело в том, что если у меня много xml-файлов на диске (на моей стороне клиента), я хочу открыть несколько соединений с сервером, а не делать одно за другим.
Мой первый вопрос: допустим, у меня есть один поток, который хранит все файлы-дескрипторы и ждет их нескольких объектов, поэтому он будет знать, когда один из них будет готов для чтения с диска. и для каждого файла у меня есть соответствующий сокет, который предполагает отправить этот конкретный файл на сервер. для сокета я могу использовать функцию выбора, чтобы узнать, какие сокеты готовы к отправке. но есть ли способ узнать, что и файл, и подходящий сокет готовы к отправке?
Во-вторых, есть ли более эффективный способ разработки клиента, потому что в моем текущем дизайне я использую только один поток, который на многопроцессорном компьютере недостаточно эффективен.
(хотя я уверен, что это будет лучше, чем запуск нового потока для каждого сокетного соединения)
в-третьих, для сервера я прочитал о схеме реактора. это кажется уместным, но все же, как и мой второй вопрос, кажется недостаточно эффективным при использовании одного потока.
Может быть, я могу использовать что-то с портами завершения? Я думаю, они довольно эффективны, но никогда не использовали их, так что не знаю точно, как.
любые ответы и общие предложения будут великолепны.