2009-09-30 3 views
1

Возможно ли это?Прослушивание сокета на клиентской машине с использованием Javascript

Я пишу интерфейс веб-администратора для сетевой системы. Мне нужно выслушать порт UDP и показать его в браузере. Могу ли я сделать это в javascript? Также; любые другие идеи приветствуются.

early-edit: Вот еще одна идея: У меня есть поддержка php и perl на стороне сервера. JS может вызвать скрипт php для начала прослушивания, который также вызовет скрипт perl, который имеет бесконечный цикл прослушивания и собирает полученные сообщения в переменную приемника. В теории; JS будет опросить PHP-скрипт каждые 2 секунды, получить переменную приемника и показать ее в браузере/html. Но; как скрипт php может получить/прочитать эту переменную? И как и когда скрипт perl прекратится? Для первой части использование файла в качестве раковины - ужасная идея; Я получаю 10 строковых сообщений в секунду, а также чтение, а затем очистку содержимого файла каждые 2 секунды. Не говоря уже о механизмах блокировки файлов ... Для второй части: я должен поставить тайм-аут где-то, но; где?

Редактировать: Да, я могу выбрать, где будет происходить прослушивание (сервер или клиент).

edit2: Почему я хочу, чтобы слушать UDP сообщения на определенный порт и показать его в браузере: Проект Я работаю над имеет некоторые специальные датчики, активированные некоторых BUSSINESS конкретных клавиш, это датчик устройства подключены к сети, и я запрограммировал их на отправку широковещательного широковещательного сообщения UDP, содержащего информацию о biz-key, когда они что-то чувствуют. В одной сети есть много таких устройств, а интерфейс веб-администратора должен иметь страницу, на которой пользователь может видеть, что происходит в режиме реального времени или почти в реальном времени (приемлема ~ 5 секундная задержка, поэтому я была идея опроса - каждые две секунды при моем раннем редактировании).

edit3: Я также нашел это: ActiveSocket который является компонентом ActiveX; как и предсказывал, что он не работал в Firefox и не имеет документации о его части html + JS.

ответ

3

Решение simpelst будет Flash-Brigdem, поскольку в Javascript нет возможности напрямую подключаться к сокету.

Я кое-что сделал некоторое время назад, вы можете скачать полный источник here. Вы можете запустить simpleserver.py (требуется python3), а затем обратиться к index.htm через localhost, чтобы проверить его.

Также обратите внимание, что модель безопасности Flash-хочет XML-документ на порт 843, он будет посылать

<policy-file-request/> 

к гнезду. Затем вы должны ответить что-то вроде:

<?xml version="1.0"?><cross-domain-policy> 
     <allow-access-from domain="*" to-ports="*" /> 
     </cross-domain-policy> 

Если у вас нет ничего, работающие на порту 843 он будет посылать тот же запрос к порту вы trtying подключиться. Но только после того, как запрос 843 был исчерпан.

Есть некоторые другие функции безопасности, но вы можете прочитать их в документах Adobe.

0

Javascript Code не имеет доступа к сокетам. Ну, почти, вы должны иметь возможность получить что-то для работы в IE6 с помощью ActiveX, но это единственная платформа, на которой ваш код когда-либо будет работать.

1

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

0

Нет, вы не можете слушать сокеты в JavaScript.

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

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

1

Какой компьютер будет слушать? ваш сервер или клиент, который запускает веб-браузер? Можете ли вы выбрать?

Если прослушивание может выполняться на сервере, проще всего прослушать с веб-страницы PHP, но это не является одновременным, поэтому, если пользователь нажимает F5 немного слишком быстро, только один процесс php может прослушивать времени, и это не сработает.

Другое решение, как вы сказали, создайте демон-слушателя на любом языке (perl, python), который также является HTTP-сервером (принимает 10 строк кода, импортирует требуемый модуль), а PHP подключается к нему через простой HTTP попросите спросить его о последних событиях, которые произошли. Демонам нужно хранить столько же истории, сколько вам нужно, если это коротко, поставьте ее в простой массив.

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