Haskell для сервера?

Объединив то, что сказал Владимир Прудников и Томас Хансен:

  • Измените свой серверный код, чтобы определить, является ли это XHR. Если это так, установите ответный код перенаправления на 278. В django:
   if request.is_ajax():
      response.status_code = 278

Это делает браузер успешным ответом на ответ.

  • В своем JS убедитесь, что представление формы через Ajax, проверьте код ответа и при необходимости перенаправите:
$('#my-form').submit(function(event){ 

  event.preventDefault();   
  var options = {
    url: $(this).attr('action'),
    type: 'POST',
    complete: function(response, textStatus) {    
      if (response.status == 278) { 
        window.location = response.getResponseHeader('Location')
      }
      else { ... your code here ... } 
    },
    data: $(this).serialize(),   
  };   
  $.ajax(options); 
});
31
задан ryeguy 27 December 2008 в 04:08
поделиться

8 ответов

Это зависит, что Вы хотите сделать со своим сервером. Как мог бы ожидаться от телекоммуникационного приложения, , Erlang выделяется при выполнении простых задач с очень высоким параллелизмом . Если Вашему серверу будет нужно огромное количество соединений в секунду, или сразу, Erlang является Вашим другом. Erlang также предлагает лучшую поддержку распределения загрузки по нескольким серверам.

Haskell выделяется при сложном, символьном вычислении , и по состоянию на апрель 2009 может также обработать очень много потоков (см. обновление ниже). Кроме того, Haskell имеет [еще 1110] инструменты для сложного права кода : вещи как QuickCheck, SmallCheck и статическая система типов. Таким образом, если Ваш сервер делает сложные, интересные вещи, и можно обойтись всего одним сервером, Вы, вероятно, более обеспечены с Haskell.

<час>

Обновление 13 апреля 2009 : Don Stewart, надежный источник, сообщает, что "последняя масштабирующая поток ошибка в Компиляторе Haskell Глазго хлюпалась несколько месяцев назад", и что некоторые пользователи сообщают об использовании миллиона потоков Haskell без проблемы. По состоянию на январь 2009, существует новая, неопубликованная бумага от конструкторов , который может описать, как это достигается.

<час>

Обновление 21 февраля 2012 : компания John Hughes, QuviQ, теперь делает QuickCheck для Erlang. Они нашли много очень интересных ошибок. Можно загрузить "QuickCheck, Мини-" бесплатно; это сопоставимо с Haskell QuickCheck. Существует также более мощная коммерческая версия.

54
ответ дан 27 November 2019 в 21:32
поделиться
10
ответ дан 27 November 2019 в 21:32
поделиться

у меня нет опыта ни в одном Haskell, ни Erlang, но на поверхности они кажутся тем же.

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

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

я люблю Haskell - это - один из моих любимых языков - но если бы я собирался записать программное обеспечение сервера, то я, вероятно, использовал бы Erlang. Но, конечно, возможно записать сервер в Haskell, если Вы знаете Haskell лучше или находите, что поддержка библиотеки выше.

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

В прошлый раз, когда я смотрел, библиотеки и платформы для создания масштабируемых серверов в Erlang выглядели немного более сформировавшимися, чем те, которые для Haskell. Я предложил бы смотреть Программирование Erlang: программное обеспечение для Параллельного Мира для получения информации о тех.

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

Теперь существует новая опция: используют Haskell/Erlang FFI, чтобы записать Вашу логику в Haskell и передать Erlang использования.

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

Намного легче представить утечки памяти в Вашем приложении Haskell из-за лени. Продолжительные серверы точно вид программ, где Вы действительно не хотите иметь любые утечки памяти.

, В то время как я соглашаюсь, что Haskell является более твердым языком и более хороший к программе в, Erlang намного легче и имеет многие библиотеки, конкретно предназначенные для использования как они.

я не думаю, что существует Haskell, эквивалентный, скажем, Mnesia и записи, что это будет трудным. Вы можете запись версии Haskell gen_server, gen_event, и т.д. но они не будут оптимизированы и настроены больше десятилетия.

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

Вопрос того, хорош ли Haskell так, как Erlang зависит от того, что люди хотят от языка. Я думаю, что оба вполне успели бы как игровой сервер, но он зависит главным образом от того, что Вы хотите или ожидаете от языка программирования. Одно из самых легких различий для замечания - то, что Haskell является статически типизированным языком с выводом типа, и Erlang является динамически типизированным языком. В целом, я сказал бы, что Haskell требует немного большей "изощренности" для не приученных к функциональному программированию.

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

Я уверен, что можно найти людей, которые думают так, но я думаю, что Вы ошибаетесь о способности Erlang поддерживать этот вид использования; это широко используется в телефонных приложениях и на самом деле довольно устойчиво. Erlang очень оптимизирован к высоконадежным, высоким серверам параллелизма.

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

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