Как сопоставить код Clojure с JSON и из него?

У меня есть сумасшедшая идея, которая включает в себя помещение некоторого кода clojure в CouchDB и написание представлений, запрашивающих его. Я не хочу хранить код clojure в виде простого текста, потому что тогда мне придется беспокоиться о его разборе в представлениях. Форматирование и комментарии не нужно сохранять, но код должен иметь возможность входить и выходить из базы данных без изменения структуры. Ключевые слова, символы, и все строки должны оставаться в своем родном типе. Кроме того, я хочу, чтобы код выглядел элегантно и был эффективным.

Я имею в виду представление вещей следующим образом:

  • Символы как строки, начинающиеся с '
  • Ключевые слова как строки, начинающиеся с:
  • Строки без изменений, кроме случаев, когда они начинаются с 'или:, в этом случае они экранируются обратной косой чертой.
  • (parens) в виде массива
  • Всегда объявляться во внутренних классах? Во всех примерах исходного кода Java, которые я видел, слушатели всегда объявлялись во внутренних классах. Почему - какова причина кодирования подобных классов вместо наличия ...

    Во всех примерах исходного кода Java, которые я смотрел, слушатели всегда объявлялись во внутренних классах.

    Почему - что такое причина для того, чтобы кодировать классы, подобные этому, вместо того, чтобы иметь слушателей в их отдельном файле * .java \ class?

    Будет ли иметь отдельные классы для слушателей плохой дизайн?

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

    Спасибо за чтение.

    Редактировать \ Обновить - 10.8.2010: Спасибо всем, кто нашел время, чтобы ответить. Множество проницательных моментов для рассмотрения.

    Означает ли это, что серверный push-взлом под названием Comet будет устаревшим?

    Есть ли причина, по которой я должен научиться внедрять комету, когда Websockets скоро (через 1-2 года) будет доступен во всех основных браузерах?

    ] Тогда я мог бы просто использовать Beaconpush или Pusher вместо этого, верно?

32
задан dctanner 1 August 2011 в 12:30
поделиться

5 ответов

Означает ли это, что хакерский метод push-сервера под названием Comet будет устаревшим?

WebSockets могут заменить Comet, AJAX, Long Polling и все другие хаки для решения проблемы, когда веб-браузеры не могли открыть простой разъем для двусторонней связи с сервером.

Есть ли причина, по которой я должен научиться реализовывать комету, когда WebSockets скоро будет доступен во всех основных браузерах?

Это зависит от того, что для вас значит «скоро». Например, ни одна из версий Internet Explorer (до IE 9) еще не поддерживает WebSockets API.


ОБНОВЛЕНИЕ:

Это не было исчерпывающим ответом. Ознакомьтесь с другими ответами и, в частности, с @ jvenema , чтобы лучше понять эту тему.

12
ответ дан 27 November 2019 в 21:07
поделиться

Рассмотрите возможность использования библиотеки / фреймворка веб-сокетов, которые возвращаются к комете при отсутствии поддержки браузером.

Оформить заказ на орбиту и крючок.

3
ответ дан 27 November 2019 в 21:07
поделиться

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

В кратком / среднем веб-сокеты будут просто оптимизацией, которая будет использоваться, когда они доступны, но вам все равно нужно будет реализовать длинный опрос (комета), чтобы полагаться, когда веб-сокеты недоступны, если вам нужно сделать свой веб-сайт доступным для много клиентов с неподконтрольными вам сетями / браузерами.

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

3
ответ дан 27 November 2019 в 21:07
поделиться

Да, потому что «скоро» - очень скользкий термин. Многие интернет-магазины по-прежнему должны поддерживать IE6.

Нет, потому что в последнее время появилось множество кометных фреймворков и серверов, которые скоро избавят вас от необходимости пачкать руки в подвале.

Да, потому что « скоро » - очень скользкий термин ...

2
ответ дан 27 November 2019 в 21:07
поделиться

Эта головоломка состоит из двух частей:

Q: Потребуется ли клиентская часть «кометы»?

A: Да. Даже в ближайшие 2 года вы не увидите полной поддержки WebSockets в «основных» браузерах. IE8, например, не поддерживает его, как и текущая версия FireFox. Учитывая, что IE6 был выпущен в 2001 году и существует до сих пор, я не думаю, что WebSockets полностью заменит комету в ближайшее время.

Q: Будет ли необходима серверная часть «кометы»?

A: Да. Серверы Comet предназначены для обработки долгоживущих HTTP-соединений, в отличие от «обычных» веб-серверов.Даже если клиентская сторона поддерживает WebSockets, серверная часть все равно должна быть спроектирована для обработки нагрузки.

Вдобавок, как упомянул "gustavogb", по крайней мере, сейчас WebSockets не поддерживаются должным образом во многих HTTP-прокси, поэтому до тех пор, пока все они не будут обновлены, нам все равно понадобится какой-то запасной механизм.

Вкратце: комета в том виде, в котором она существует сегодня, не исчезнет в ближайшее время.

В качестве дополнительного примечания: версии WebSockets, которые в настоящее время реализованы в Chrome и Safari, являются двумя разными проектами, и работа над «текущим» проектом все еще находится в очень интенсивной разработке, поэтому я даже не верю, что это реалистично. сказать, что поддержка WebSockets в настоящий момент работает. В качестве любопытства или для обучения, конечно, но не как настоящая спецификация, по крайней мере, пока.

[Обновление, 23.02.11]

Текущая версия Safari имеет неработающую реализацию (не отправляет правильный заголовок), Firefox 4 только что устарел WebSockets, поэтому он выиграл ' t ship включен, и IE9 тоже не очень хорошо выглядит . Похоже, Chrome - единственный с работающей, включенной версией черновой спецификации, так что WebSockets еще предстоит пройти долгий путь.

17
ответ дан 27 November 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: