Comet сервер на эрланге

Aug 29, 2012 22:32

Статья для людей, только начинающих знакомиться с эрлангом: как написать простой comet сервер.

Готовый код здесь: http://github.com/maxlapshin/comet

Read more... )

comet, erlang, учеба

Leave a comment

Comments 22

kurilka August 30 2012, 04:44:56 UTC
Макс, имхо в пункте v3 про mimetypes не совсем явно, что это приложение, и какую строчку добавлять (по-моему не для начинающих такая задача копаться в коммитах, чтоб понять о чём речь).
За make:all([load]) спасибо.

Reply

levgem August 30 2012, 06:04:12 UTC
поправил немного.

Reply

kurilka August 30 2012, 06:10:21 UTC
"Чтобы" тоже, наверное, стоит поправить в том же пункте.

Reply

levgem August 30 2012, 06:16:55 UTC
Да, с «что бы» у меня проблема.

Reply


blackyblack August 30 2012, 05:25:34 UTC
Прикольно.
make run как-то нелогично. Почему не run.sh?

Reply

levgem August 30 2012, 06:00:37 UTC
Никаких особых причин нет.

Reply

si14 September 1 2012, 09:04:02 UTC
make build всё равно понадобится, поэтому почему бы и нет.

Reply

levgem September 1 2012, 09:08:09 UTC
Да, точно. Руки привыкают make что-то набирать.

Reply


lionet August 30 2012, 07:47:21 UTC
Лучше бы в fprog.

Reply

kurilka August 30 2012, 07:53:34 UTC
А новый выпуск планируется?

Reply

levgem August 30 2012, 08:25:48 UTC
Лев, ну я тебя никак не поймал - это во-первых, во-вторых я не знаю, какой формат подходит.

Если считаешь нужным - оформим в fprog.

Reply


ext_1303485 August 30 2012, 15:58:08 UTC
Спасибо за статью!
1. А что случится, если в очереди лежит сообщение с таймстемпом 100500 а клиент отправит таймстемп 100600 ? Сообщение навечно останется в очереди?

2. Почему так записано?

{ok, NewTS, Messages} when length(Messages) > 0 ->
...;
{ok, NewTS, []} ->
...

Может есть смысл поменять местами кейсы и обойтись без when length(Messages)? Или это мелочи уже?

3. Как человеку не работавшему с Cowboy, не очень понятно при каких обстоятельствах вызываются comet_handler:info/3 (как handle_info в gen_server?) и comet_handler:handle/2 (при новом запросе от ковбоя?) comet_handler:init/3 (при запуске процесса в пуле? не похоже..). Это какой-то behaviour? Или предполагается что с документацией по ковбою я уже знаком?

4. Мне кажется есть смысл сделать как то так:

info({_Pid, NewTS, Messages}, Req, _) ->
handle(Req, {NewTS, Messages});

Во имя всяких там DontRepeatYourself =) Или это менее наглядно? Или можно из info перескочить в handle вернув из info какую-то "команду"?

Reply

levgem August 30 2012, 18:27:01 UTC
1. Из очереди выкидываются старые сообщения. Сам клиент очереди конечно же не может её опустошать.

2. Что бы явно указать возможные варианты. Любая другая фигня должна уронить нас.

3. В README.md от ковбоя это описано. info вызывается на каждое сообщение, если init вернул loop. а handle вызывается, если init вернул ok

4. Я считаю, что в данном случае это лишь вредит. Крохоборничество с DRY приводит к адским неподдерживаемым ветвлениям кода.

Reply


kpoxman August 31 2012, 08:50:09 UTC
make run в данном примере запускает с выводом в текущую консоль.

Как грамотно запускать на production? Чтоб output писался в файлы.

Reply

levgem September 1 2012, 09:09:11 UTC
В следующей серии напишу. Про авторизацию, про демонизацию.

Reply


Leave a comment

Up