Как стать автором
Обновить

Комментарии 10

Позвольте я процитирую те строки в статье, которые легли мне, инженеру по образованию и экономисту по жизни, на душу:
"… позволяет в рамках одного приложения, иметь один или несколько серверных потоков. Каждый серверный поток способен обслужить большое количество клиентов. Хотя библиотеку, можно использовать в модели типа запрос-ответ, в первую очередь она была рассчитана на поддержание постоянного соединения с большим количеством клиентов и обменом сообщений в реальном времени"
Вот и представилось мне, что несколько клиентских компьютеров низкого уровня связано с сервером на один уровень выше по онлайн цифровым каналам 9600 бод, а обратная связь Е1 2МБит/с связывает сервер с каждым компьютером клиента.
Клиенты например все дружно водят курсором по экрану (физически конечно они двигают например мышки компьютеров), а по экрану VGA клиента перемещается точка, параллельно координаты курсора передаются по онлайн каналу на сервер. Сервер собирает координаты и в реальном масштабе времени формирует Серверное видеоизображение VGA в котором рисует все точки клиентов в заранее предопределенном цвете.
Параллельно (а скорее последовательно, но быстро) сервер для каждого клиента в соответствии с координатой его курсора копирует из Серверного видеоизображения видеоизображения квадрата с центром с координатами курсора клиента и с размерностью до 10 пиксел. Затем видеоизображение квадрата посылается по ISDN от сервера на компьютеры клиентов. В компьютере клиента полученное видеоизображение квадрата выводится на клиентское видеоизображение с центром, соответствующем курсору.
Вот и вопрос у меня-инженера: Позволит ли EXtensible Server Core при наличии указанного оборудования и каналов связи реализовать изложенный мною алгоритм, или она создана, для решения высоких задач.

  1. Я бы разделил чистый С от Qt в разные проекты, или хотя бы разные папки.
  2. Unix и Windows реализации тоже лучше разделить и инкапсулировать отдельно, чтобы в основном коде сервера не было ifdef
  3. При ошибках библиотека убивает весь процесс, ни кого не спросив, что моветон.
  4. Зачем zip-архив в репозитории?

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


Т.о. на тредах, которые не создавал пользователь, выполняется пользовательский код. Это фреймворк, больше ).

Т.е. библиотек с коллбэками и созданием потоков не бывает?
Основное отличие фреймворка от библиотеки скорее в отношении к клиентскому коду, чем в наличии коллбэков/потоков. Т.е. библиотечный код нейтрален к клиентскому коду — он его просто вызывает и всё. Библиотечный код не имеет приоритета над клиентским. У фреймворка же полный авторитет над исполнением. И поэтому можно данный код пока называть фреймворком — если посмотреть исходники, то в случае ошибки, вызывается exit, убивая весь процесс, т.к. фреймворк считает себя главным. Библиотеке правильнее было бы просто возвратить код ошибки.

понимая, что автор не Вы, все же скажу, что немного сомневаюсь после прочитанного в поддержке прям множества клиентов в реальном времени… когда на каждого отдельный тред…
Для большинства задач все подключения находятся в одном серверном потоке. Тогда на программу у нас всего 2 потока, не зависимо от количества подключений, один главный и один серверный.

Но, на пример нам нужно чтобы наша серверная программа для некоторых запросов работала с базой данных, а некоторые запросы выполняла в реальном времени, то есть с максимальной скоростью. Так как запрос в базу данных может выполняться длительное время, то нам необходимо два серверных потока. Один будет работать с базой, другой будет выполнять задачи реального времени. Два серверных потока запускаются на двух разных портах таким образом:

int des = exsc_start(9000, 30, 5, 1024, 20000, exsc_newcon, exsc_closecon, exsc_recv, exsc_ext);
int des_rt = exsc_start(9001, 30, 5, 1024, 20000, exsc_newcon_rt, exsc_closecon_rt, exsc_recv_rt, exsc_ext_rt);
могу ошибаться, но обычно запросы оформляют в виде задач, и складывают в очередь, а уже серверные (или доп) потоки сами берут задачу, выполняют и отдают ответ, ну или это из-за относительного доминирования boost::asio

1 вы разработчик?
2 где read me в репозитории?
3 “обслуживают тысячи клиентов в различных серверных системах” — о каких продуктах идёт речь?
4 в статье описано как вызывать функции… а где концепция?
5 внутри функций если судить по файлам репозитория просто манипуляции с сокетами — в чем новизна?
6 это все точно не шутка?

QT пыталось запилить свой REST-сервер, но так и непонятно, чем всё закончилось.

неподходящистью Qt под задачу наверное
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации