2012-09-03 5 views
1

У меня есть базовое приложение С, управляющее довольно интенсивным оборудованием. В настоящее время я разрабатываю веб-интерфейс для устройства, большинство его функций - представлять информацию о состоянии пользователю. Таким образом, каждую секунду или около того обновляйте поля на веб-странице с соответствующей информацией (температура, частота кадров, yada yada ...) Устройство запускает linux и имеет apache. Текущая настройка:Лучшая практика для вызова AJAX для запуска кода C?

  1. Javascript на странице веб-статусе делает вызов AJAX (от setInterval)
  2. пробегов PHP файла, пишет FIFO
  3. приложение C читает FIFO, делает некоторые работы на основе входных данных (вероятно, пустыми , имея в виду только дайте мне статистику), пишет обратно FIFO
  4. PHP файл считывает из FIFO, разбирает, json_encode, эхо
  5. Javascript разбирает JSON и обновления страницы

Вот где вы пришли ... цель состоит в том, чтобы вывести посредника PHP. Каковы соглашения (если они существуют) для вызовов AJAX программам C? Лучшая практика?

Варианты (насколько я знаю):

  • Sockets. Слушайте программу C на конкретном порту .Something similar here.
  • Node.js. Я не знаком с этим, я никогда не использовал его. Но моя краткая экспозиция заставляет меня думать, что это может быть очень полезно для этого? Насколько я понимаю, это «javascript на стороне сервера», но это на самом деле C-код? Просто нам нужно понять.
  • CGI. Может ли cgi работать с постоянной программой C? Или он загружает программу C с нуля при вызове?
  • HTML5 WebSockets?

Любое понимание оценено. Конечно, лучший ответ, возможно, даже не указан выше. Это всего лишь мои знания в этой области. Благодаря!

+0

Это гораздо лучше подходит для форума или чата. Мы здесь, в StackOverflow, сосредоточены на решении конкретных проблем, которые вы застряли. Я не пытаюсь сказать, что ваш вопрос глуп, плох или что-то еще, это просто не в рамках StackOverflow. – orlp

+0

Перейдите по узлу node.js - он поддерживает WebSockets, чтобы предотвратить дорогой опрос 'setInterval'. Это не C, это чистые js. – moonwave99

+1

@ moonwave99 справедливое количество узлов написано на C++;) можно написать расширения узлов в C++, см. Http://www.lupomontero.com/writing-node-js-modules-in-cpp/ –

ответ

1

Мы использовали библиотеку lib libsbsockets (http://libwebsockets.org/) для связи между JavaScript и C++-приложением. В нашем случае мы отправляем JSON на сервер C++ и через него через websockets.

В вашем случае вы можете взять те же данные, которые вы в настоящее время отправляете через Ajax, и отправлять их программе C по веб-расписанию. Программа C может затем сгенерировать тот же JSON, что и PHP-программа, которая генерирует и отправляет ее обратно на JavaScript, снова через websocket.

Смежные вопросы