Nikolay
А что странного?
ну есть косяки типа четырех подключений подряд
wuðer
SSE, socket'ы или long-poll?
Andrey
SSE, socket'ы или long-poll?
SOAP (лицо осла из шрека)
Алексей
Хотелось бы упростить себе жизнь и сделать шаг вперед во фронтенде, хотел от вас совет попросить. Сейчас использую шаблонизатор express, стили по нулям (css вояю какую нидь), Все компоненты рисую вручную или bootstap. Запросы через ajax, jquery. Смотрю в сторону pug + vue + socket.io С чего бы начать и чем вы пользуетесь для фронтенда. Спасибо за любые советы.
Arkadii
Gulp, sass
Arkadii
Flex-box,Css grid
bebebe
дратути кто-нибудь имел дело с openresty+websocket'ами? или это не тот чатик?
bebebe
бггг оттуда меня послали сюда
Stepan
о а можно ссылку на девопс?
Stepan
спасибо
Aleksand
бггг оттуда меня послали сюда
а в чем проблема у тебя?
bebebe
а в чем проблема у тебя?
я хотел спросить, кто-нибудь имел дело с вебсокетами в openresty (nginx + lua)
bebebe
либо чатик профильный
bebebe
клиентом будет выступать андройд
bebebe
Александр, что то не то вы меня спрашиваете
Stepan
он намекает что стоит без вступления сразу переходить к вопросу, и тогда если кто знает ответит)
Aleksand
Александр, что то не то вы меня спрашиваете
так в чем твоя проблема? не понятно
bebebe
мой вопрос, кто-нибудь терминировал weboscket в nginx с обрабтичком endpoint'a на lua
bebebe
а конкретно этой либой https://github.com/openresty/lua-resty-websocket
Михаил Макарычев
Никита
Всем привет! Подскажите либы для работы с большими json файлами? пытаюсь спарсить 300мб файл. нода съедает всю оперативу. пробовал https://github.com/philbooth/bfj
Дима
Стримы
Bfj на стримах и есть
Никита
неа. просто вся оператива съедается со временем(~12гб)
bebebe
Спроси в @ProLua
вот спасибо
Anton
всем привет! скажите, кто как подходит к вопросу логирования node-приложений? слышал мнение, что апп по-хорошему должен писать только в stdout, и должен быть второй сервис, который слушает stdout этого аппа и уже сам решает, что делать с логами и куда их раутить
Алексей
неа. просто вся оператива съедается со временем(~12гб)
Если файл 300 мб, а съедается 12 Гб, можно предположить, что память банально течёт
Anton
у нас ошибки шлются в logentries
то есть в сам апп зашита логика отправки?
Anton
это правильный подход для докера, в остальных случаях это вряд ли будет удобно
ну вот вроде как пытаемся сделать так, чтобы это всё потом в докер упаковать и в случае необходимости скейлить
V
у них модуль для логгирование, вместо console.error, пишешь logger.err
Aleksand
ну вот вроде как пытаемся сделать так, чтобы это всё потом в докер упаковать и в случае необходимости скейлить
ну тогда верный подход, собирать логи с stdout у докера может кто угодно, в зависимости от того что вы используете для хранения логов
Anton
у них модуль для логгирование, вместо console.error, пишешь logger.err
ну да, мы раньше тоже использовали winston, там делаешь winston.info или winston.err, а он уже решает, что с этим делать
Aleksand
ну да, мы раньше тоже использовали winston, там делаешь winston.info или winston.err, а он уже решает, что с этим делать
лучше писать свой простой логгер, который делает только то что нужно, будет в 10 раз быстрее любого пакета для логов
Anton
ну тогда верный подход, собирать логи с stdout у докера может кто угодно, в зависимости от того что вы используете для хранения логов
я вот пытался найти, как это сделать, но пока не особо понял. ну то есть можно сделать node index.js | some_logger_binary, и тогда этот logger сможет читать stdout нодовского приложения, а если, например, логгер запущен в соседнем докер-конейнере.. непонятно
Anton
или он должен быть запущен на хост-машине и читать логи докера через docker logs
Aleksand
я вот пытался найти, как это сделать, но пока не особо понял. ну то есть можно сделать node index.js | some_logger_binary, и тогда этот logger сможет читать stdout нодовского приложения, а если, например, логгер запущен в соседнем докер-конейнере.. непонятно
почему непонятно? тут есть два нормальных подхода. в каждом контейнере запускаешь процесс собирающий лог, или запускаешь отделньый контейнер, прибиваешь к нему сокет докера и он со всех контейнеров нужных собирает лог и шлет куда надо
Aleksand
или он должен быть запущен на хост-машине и читать логи докера через docker logs
только не на хосте, а где угодно, главное сказать ему адреса нод с которых надо собирать и критерий выбора контейнеров
Aleksand
вот второй подход можете пояснить, пожалуйста? не совсем понимаю, как это. ну или скинуть ссылку где про это можно почитать
ты запускаешь контейнер, даешь ему доступ к сокету докера, он через remote api просит у него логи для нужных контейнеров, разбирает стрим и отправляет куда надо
Aleksand
плюс у докера есть свои драйвера для логов
Aleksand
https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers
Gleb
Возьми fluentd, в него логи шли по сети из логгера (winston/bunyan), а в fluentd пиши логи на диск или куда там тебе надо. Когда приложение перенесёте в docker - логгер пусть пишет в stdout, а лог контейнера перенаправляете в fluentd.
Anton
ты запускаешь контейнер, даешь ему доступ к сокету докера, он через remote api просит у него логи для нужных контейнеров, разбирает стрим и отправляет куда надо
а, я понял примерно. просто не сталкивался с концепцией сокета в докере. то есть просто контейнер сможет исполнять команды докера через этот сокет
Gleb
плюс у докера есть свои драйвера для логов
Вот, это правильное решение. А прокидывать socket - не оч.
Aleksand
Вот, это правильное решение. А прокидывать socket - не оч.
если мне нужна своя логика то мне свой драйвер писать чтоль?
Gleb
И какая ж логика нужна?
Aleksand
И какая ж логика нужна?
меня ни один не устраивает оттуда, мне нужно хитро парсить их и слать в эластик сразу
Aleksand
а, я понял примерно. просто не сталкивался с концепцией сокета в докере. то есть просто контейнер сможет исполнять команды докера через этот сокет
концептия там не в сокете, а в доступе к remote api, в докере любой клиент работает через него, и не имеет значения какой там сокет
Anton
Понял всё, спасибо, буду изучать 👍🏼
Aleksand
Понял всё, спасибо, буду изучать 👍🏼
главное не открывать remote api вовне без аутентификации, максимум через сутки на твоем железе дети будут майнить крипту
Pavel
Всем привет, может ли кто подсказать хорошую правильную структуру приложения на веб-сокетах? Может есть какой хороший пример?
Nurik
Всем привет. Ребят подскажите почему при pm2 logs сообщения типа debug которые генерирует winston воспринимаются как ошибки, debug сообщения пишутся в STDERR что ли ?
Nurik
Вот пример лога
Nurik
Всем привет, может ли кто подсказать хорошую правильную структуру приложения на веб-сокетах? Может есть какой хороший пример?
Вот как я делал (не знаю насколько она правильная, но мне норм): 1. Первое это поднять шину событий, чтобы можно было отделить бизнес логику от конкретных событий 2. Это создать директории в корне для каждого участника. Т.е. если есть бразуер, то папка browser, если моб клиенты то соотвествующая папка. 3. В каждой папке участика listeners и emitters 3. Прикрутить логи и логировать всё, желательно с генераций уникального номера ошибки, чтобы можно было найти в логе. 4. Если используются разные хранилища, то насоздавать фассадов. 5. Создать пул действий/сессиия как вам удобно, который будет фиксировать действия/события между некоторым количеством участников. И будут храниться пока не будет выполнено какое-нибудь условие. (Особенно это может пригожится если есть мобильные клиенты, которым нужно восстанавливать цепочку следующих действий) 6. Вывод в реальном времени в dashborad, чтобы отследить трудноуловимый баг например. Всё-равно он нужен будет. UPDATE: 7. Если предполагается, что на сайт/моб.приложение будут входит под одним и тем же аккаунтом, то нужно создавать комнаты, и при каждом измененеии писать в пул. генерировать событие, чтобы мобильные клиенты/браузеры чекнули сервер на изменения.
Pavel
Вот как я делал (не знаю насколько она правильная, но мне норм): 1. Первое это поднять шину событий, чтобы можно было отделить бизнес логику от конкретных событий 2. Это создать директории в корне для каждого участника. Т.е. если есть бразуер, то папка browser, если моб клиенты то соотвествующая папка. 3. В каждой папке участика listeners и emitters 3. Прикрутить логи и логировать всё, желательно с генераций уникального номера ошибки, чтобы можно было найти в логе. 4. Если используются разные хранилища, то насоздавать фассадов. 5. Создать пул действий/сессиия как вам удобно, который будет фиксировать действия/события между некоторым количеством участников. И будут храниться пока не будет выполнено какое-нибудь условие. (Особенно это может пригожится если есть мобильные клиенты, которым нужно восстанавливать цепочку следующих действий) 6. Вывод в реальном времени в dashborad, чтобы отследить трудноуловимый баг например. Всё-равно он нужен будет. UPDATE: 7. Если предполагается, что на сайт/моб.приложение будут входит под одним и тем же аккаунтом, то нужно создавать комнаты, и при каждом измененеии писать в пул. генерировать событие, чтобы мобильные клиенты/браузеры чекнули сервер на изменения.
Спасибо 👍
Gleb
Лови https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
Gleb
Там stderrLevels и вот это всё.
Nurik
Там stderrLevels и вот это всё.
Благодарю. Теперь понятно. Хотя и странно почему в STDERR по дефолту пишет.
Gleb
Были там по этому поводу какие-то дискуссии, но решили не ломать legacy, по моему. Да и сам winston уже legacy, либо по старым проектам валяется, либо у учеников Ильи Кантора)
Gleb
Bunyan. Но если вы pm2 only и всё такое, то вам скорей всего и winston подходит, юзайте его скопокойно.
Gleb
Bunyan для docker, JSON лога и всего такого.
Mikhail
В чем может быть проблема? Не работает (пишет Invalid command: --auth): pm2 start mongod -- --dbpath /home/data/db -- --auth Все ок: mongod --dbpath /home/data/db --auth
Sergey
нахрена ты так делаешь
Sergey
скрипт нормальный не написать?
Mikhail
нормальный - какой?
Sergey
у тебя дважды --
Mikhail
у тебя дважды --
так это для pm2, очевидно же
Sergey
нормальный - какой?
run.sh или process.config.js для pm2