Думаю, название говорит само за себя. По сути, у меня есть программа на C, которая использует множество структур данных для выполнения различных задач. Программа должна быть на C, и у нее вообще не обязательно должен быть графический интерфейс, но я хочу его создать, потому что почему бы и нет.

Программа и веб-сервер nodejs (если он был запущен) были бы на одном и том же локальном компьютере. По умолчанию они будут запускаться вместе и только мной. Итак, мой вопрос: реально ли попытаться разработать графический интерфейс на таком языке, как Node.js, и выполнять непрерывные вызовы программы на языке C? Насколько это будет эффективно или неэффективно? Какие недостатки?

Как я уже сказал, мне нужно выполнить программу на C. Это домашнее задание, но я действительно не хочу пытаться программировать какой-либо пользовательский интерфейс на C. Любые другие методы тоже подойдут. Я могу писать на Python и Node.js, и моего ООП на C ++ достаточно, чтобы создать пару 2D-программ на Direct2D.

РЕДАКТИРОВАТЬ 2: Программа (будь то программа C или графический интерфейс) в конечном итоге должна будет каким-то образом использовать базу данных. Так что это может стать логическим обоснованием любых возможных ответов, если это что-то значит.

РЕДАКТИРОВАТЬ 3: Что я ищу в ответе: да / нет, это возможно, какой язык использовать и почему, и, надеюсь, какая-то библиотека для этой задачи.

Неэффективность: учитывая "стандартную" машину (скажем, i5-337U @ 1,7 ГГц, 6 ГБ ОЗУ DDR3), взаимодействие с графическим интерфейсом пользователя (которое будет включать щелчок мышью, и ввод будет отправлен в программу C в качестве аргумента, который затем будет выполнять вычисления на указанном входе, все из которых является простой математикой, и для каждого ввода будет не более 10 простых (добавить, mult, dvd, все <4-значные числа) вычислений). быть полным, как и в расчетах, и обновлении графического интерфейса пользователя с результатами расчетов, в течение секунды или двух.

1
michaelfward 10 Окт 2014 в 22:48

2 ответа

Лучший ответ

Основываясь на моем прошлом опыте, я бы попробовал что-то вроде этого:

< Сильный > Frontend

Создайте интерфейс, который что-то делает, а именно отправляет сообщения на сервер RESTful. Это может быть jQuery, Angular или любой другой фреймворк, который вам удобен.

Серверная часть

Создайте сервер Node, работающий на том же компьютере, что и ваша программа C. Node довольно хорошо обрабатывает веб-запросы и выбирает для обработки HTTP фреймворк, например Express, Restify, Koa или другие.

Программа C

Затем как-нибудь поговорите со своей программой на C. Вы ничего не упомянули в своем сообщении, но TCP - это обычная библиотека, которую вы можете найти для своего проекта C, и вы можете просто использовать основные сетевые библиотеки.

В качестве альтернативы вы можете запустить свою программу C через Node и поговорить с ней через stdin! Поищите советы о том, как это сделать, в области переполнения стека, но это может быть даже проще, чем TCP.

0
Zeeshan Hassan Memon 12 Авг 2016 в 13:38

По моему убежденному опыту, ваша программа на C может быть программой на основе командной строки, которая взаимодействует с внешним миром через STDIN / STDOUT.

Программа с графическим интерфейсом запускается в браузере, используя все виды фреймворка Javascript, такие как Jquery, AngurlarJS и т. Д.

NodeJS (с ExpressJS) работает как локальный HTTP-сервер, являясь идеальным связующим звеном между ними.

С одной стороны, NodeJS spawn вашу программу C как дочерний процесс и общается с ней через STDIN / STDOUT.

С другой стороны, NodeJS передает HTTP / AJAX / WEBSOCKET графическому интерфейсу в браузере.

Несколько обходных путей на ваше рассмотрение:

  1. Графический интерфейс пользователя может отправлять в NodeJS множество настроек в формате JSON, которые будет сложно «перевести» во входные данные командной строки для программы C. Один из способов - заставить NodeJS сохранить настройки в локальном файле JSON, а ваша программа C проанализировать этот файл JSON на предмет входных параметров на лету.

  2. Графический интерфейс в окне браузера может иметь некоторые ограничения, например, нельзя выбирать локальные файлы / папки. Но NodeJS может spawn другими простыми программами с графическим пользовательским интерфейсом вызывать диалоговое окно выбора файла для этой конкретной цели. Я сделал эти простые программы с графическим интерфейсом пользователя со сценариями AutoIt, скомпилированными в автономный exe.

Такая, казалось бы, сложная архитектура ядра / внешнего интерфейса имеет несколько преимуществ:

  1. Фреймворки GUI устаревают и быстро устаревают, не говоря уже о том, что огромные усилия по обучению программированию с ними будут напрасными. (просто упомяну несколько: Win32, MFC, WinForm, WPF). В настоящее время браузер - это новая «виртуальная машина», которая запускается повсюду в вашем графическом интерфейсе. Это правда, что фреймворки браузеров и Javascript развиваются намного быстрее. Но их относительно легко закодировать и придать им «новый вид».

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

  3. Код ядра, являющийся командной строкой (или основанный на консоли), упрощает тестирование / отладку / развертывание / расширение ... (вся философия unix)

  4. Код HTML / javascript браузера, nodejs, командная строка могут быть потенциально многоплатформенными (windows, linux, mac os x и мобильные устройства) и очень легко скомпилированы и развернуты. (просто скопируйте / вставьте файл, без установки)

  5. локальный сервер nodejs, обслуживающий локальный хост, может быть туннелирован извне через ngrok, так что он довольно легко становится настоящим веб-приложением

  6. [будет продлено]

1
Zhe Hu 15 Июл 2015 в 03:27