Постановка задачи
Был разработан сайт-надстройка над файлохранилищем. В качестве дополнения к данному сайту я разрабатывал клиент под windows. Данный клиент должен был синхронизировать файлы на диске с репозиторием.
Одной из фишек сайта было моментальное открытие файла с диска ассоциированным приложением. О реализации данной фишки и пойдет речь в данной статье.
Решение задачи
Решением в лоб является любая реализация технологии COMET, но все они чреваты трудностями и затратами на сервер. Вдохновением для моего решение была одна неприятная особенность работы скайпа: если его установить до IIS, то скайп начинал слушать 80-ый порт. Соответственно схема работы получилось очень простой:
- пользователь нажимает на кнопку на сайте
- браузер делает http запрос к localhost
- клиент, слушающий соответствующий порт, открывает файл
В клиенте добавляем любую реализацию http сервера и вешаем слушателя на какой-нибудь порт (в нашем случае 7000).
На странице добавляем небольшую функцию:
function doSomethingOnDisk(){
$.getJSON(
"http://127.0.0.1:7000?jsoncallback=?",
{ command: commandname [, optional params] },
function (data) {
//do something
}
);
}
Нужно быть внимательным, т.к. в данном случае происходит кроссдоменный ajax запрос. Поэтому не забываем про «jsoncallback=?» и обернуть ответ в клиенте в соответствующую обертку (придет в параметре jsoncallback).
Плюсы
- Просто
- Быстро
- Никакого лишнего трафика
Минусы
- Порт может быть занят или закрыт
- Если есть брандмауер, то windows попросит разрешения для приложения и пользователь может отказать
П.С. как не трудно заметить, данная реализация позволяет давать с сайта любые команды клиенту.
jQuery.getJSON
http server для C#
Комментариев нет:
Отправить комментарий