Andrey
14.03.2018
08:16:19
в базу хожу и пишу
ojab
14.03.2018
08:16:35
ну вот
Если интересно сколько/откуда конкретно — dtrace/perf в руки и см. http://www.brendangregg.com/offcpuanalysis.html
Andrey
14.03.2018
08:20:02
ок, спасибо, поразбираюсь
Google
Nursultan
14.03.2018
09:04:02
Всем првиет. у меня следующая ситация. есть модель User создана по devise. Есть модель Project. User может создать project и соответственно project принадлежит user. но есть так же модель interest. Интерес это когда второй пользователь может нажать мне интересно по отношению к project созданному первым пользователем. вопрос
можно ли писать так
class Project < ApplicationRecord
belongs_to :user
has_many :interests
has_many :users, through: :interests
end
типа проект принадлжеит юзеру и имеет много своих юзеров через интересы
ojab
14.03.2018
09:08:57
почему нет?
Lavrushchik
14.03.2018
09:12:23
с gmaps4rails работал кто?
Антон
14.03.2018
09:17:07
вопрос сразу спрашивай
biert
14.03.2018
10:59:44
Приветствую Господа, есть вопрос, гугл долгое время но толковой информации не нашел, ну или рабочей, есть задача запускать автоматически delayed_job после ребута, или если он сам упадет, план был использовать monit, добавить специальный файлик и он сам будет рулить этим, но не получается, пытался делать в init.d sh скрипт, он работает но monit не воспринимает его адекватно и думает что процесс не запустился, как вы решали подобное?
Vasiliy
14.03.2018
11:00:46
systemd
biert
14.03.2018
11:01:24
находил и с этим статью
https://singlebrook.com/2017/10/23/auto-restart-crashed-service-systemd/
Vasiliy
14.03.2018
11:02:32
самое по моему простое что можно использовать
Google
biert
14.03.2018
11:05:32
пока не пробовал, то есть если создать директорию delayed_job.service.d в /etc/systemd/system/ а в нем файлик restart.conf с указаным там содержимым то оно будет работать?
я не совсем понял как оно работает и как будет знать какие команды использовать для запускать или остановки сервиса
или оно работает через файлик что я уже создал в /etc/init.d/delayed_job
по выхлопе там видно что скорее всего да
ShadoWalkeR
14.03.2018
11:07:30
А просто на systemd service файл переписать не вариант?
Просто подпирать один костыль (сгенерированный service) другим костылем - куском service файла, который должен быть не очень идея
Просто если этому delayed_job.service.d/restart.conf прописать секции [Install] и [Unit]. то его можно будет положить в /etc/systemd/system/ как delayed_job.service и дропнуть init скрипт
biert
14.03.2018
11:09:54
тыкните пожалуйста где почитати о том чтобы переписать
сейчас попытался по гайду тому сделать, получаю
$ sudo systemctl start delayed_job
Job for delayed_job.service failed because a configured resource limit was exceeded. See "systemctl status delayed_job.service" and "journalctl -xe" for details.
ShadoWalkeR
14.03.2018
11:10:58
Посмотрите другие service файлы - чтото должно быть в системе уже
И да - смотрите в логи
biert
14.03.2018
11:11:16
спасибо
ShadoWalkeR
14.03.2018
11:11:17
Там же написано как
biert
14.03.2018
11:43:54
кажись сделал
то есть если я сделал сервис в systemd то уже не нужно добавлять это в monit
ShadoWalkeR
14.03.2018
11:49:24
Зависит от того что вы хотели monitом сделат
biert
14.03.2018
12:01:21
еще можете подсказать, pid файл delayed_job он создается только когда запущен демон?
No
14.03.2018
12:31:06
Ребята, не подскажете, где можно понятно почитать, как WebSocket работает на низком уровне? Интересует нюансы в стиле "Что является WebSocket Connection-ом?". К своему стыду, гуглю уже битый час (включая поиск по WebSocket спецификации), однако целостную картинку никак в голове составить не могу
Полно материала как сделать чтобы они работали, и мало материала о том, как же всё-таки они работают
ShadoWalkeR
14.03.2018
12:36:28
Google
ShadoWalkeR
14.03.2018
12:36:37
No
14.03.2018
12:37:04
Но пока не актуально, нашёл материал
Возможно он мне поможет
ShadoWalkeR
14.03.2018
12:38:33
Ну может по WS так RFC написан - я по SIP обычно читаю - там достаточно подробно изложено)
Roman
14.03.2018
12:38:53
а что конкретно непонятно? это просто протокол, как http, по которому общаются сервер и клиент
вот норм статья https://learn.javascript.ru/websockets
No
14.03.2018
12:40:27
Сейчас объясню, что непонятно, попытаюсь сформулировать вопросом
1. У нас есть URL для handshake.
2. Клиент засылает запрос на connection.
3. Сервер создает WebSocket connection и засылает респонс.
4. Чем является этот WebSocket connection? На низком уровне я имею ввиду.
Я имею ввиду, что это такое? Где прочитать, как оно работает?
ojab
14.03.2018
12:46:34
No
14.03.2018
12:47:28
ShadoWalkeR
14.03.2018
12:47:29
Roman
14.03.2018
12:47:34
на сколько низком уровне?) ws работает поверх tcp, следовательно это просто пакеты данных
No
14.03.2018
12:48:01
Сек. Сейчас будет глупый вопрос
ojab
14.03.2018
12:48:18
ну и есть вероятность что у гугла веб-сокеты работают поверх quic/udp, но это нестандартно
No
14.03.2018
12:48:25
На каждый WebSocket Connection создается отдельный TCP? Да/нет?
ShadoWalkeR
14.03.2018
12:48:26
Пардон - у меня уже просто мозги кипят под вечер и надо как то расслабиться ?
ojab
14.03.2018
12:48:52
да, создаётся
Google
No
14.03.2018
12:49:07
Для каждого TCP-конекшена нужен отдельный порт? Да/нет?
ojab
14.03.2018
12:49:14
но обычно создают одно соединение и всё шлют через него
для каждого tcp-коннекшна нужен уникальный кортеж [src_ip, src_port, dst_ip, dst_port]
No
14.03.2018
12:50:31
Вот к этому вопросу я примерно и вёл, не знал как сформулировать
Я где-то туплю
Но не пойму где
Vasiliy
14.03.2018
12:51:50
собсно а зачем это знать?
Roman
14.03.2018
12:53:00
так до tcp включительно все точно также, как и с http
это такие же пакеты, только сервер и клиент не закрывают сразу соединение, там идет проверка ping/pong все дела
No
14.03.2018
12:56:07
собсно а зачем это знать?
1. Дискуссия. 2. Хочу знать, какие ресурсы используются при использовании сокетов чтобы понимать от чего зависит колличество одновременных соединений
ShadoWalkeR
14.03.2018
12:56:15
TCP нужен только чтобы доставить пакеты от компьютера А к Б. А дальше между пользователями уже на уровне выше разруливаться должно
Кортеж нужен, когда у нас одно приложение открывает несколько соединений - чтобы идентефицировать какие пакеты от кого кому передавать
Это в схемах OSI и TCP/IP описано
Верней так - кортеж [src_ip, src_port, dst_ip, dst_port] используется всегда. Просто в случае одного соединения раскидывания по пользователям идет уровнем выше.
ojab
14.03.2018
12:59:21
т. е. до браузера конкретного юзера и по кукам/etc сервер узнаёт, что это за юзер
от обычного HTTP в этом плане ничем не отличается
ShadoWalkeR
14.03.2018
13:00:41
Там если в пакет TCP заглянуть все что связано в websocket в секции данных. В заголовках только транспортная информация - от какого порта какому порту между какими IP передать сообщение
Google
ShadoWalkeR
14.03.2018
13:04:01
Почитайте про OSI - там механизм очень хорошо расписан как через уровни проходит пакет. Хоть и применяется везде схема tcp/ip а не OSI, но разница только в том, что три верхних уровня объединили
Roman
14.03.2018
13:04:24
ну да, это уже все на уровне tcp определено, ws не имеет к этому отношения. Как я понимаю, вся суть в постоянной проверки связи посредствам ping/pong, которые по сути являются обычными запросами
No
14.03.2018
13:08:28
Так, пытаюсь парсить. Только что понял, что я сильно плаваю в подобной теории
Сегодня вечером буду просвящаться, курить RFC
Тогда два практических вопроса, максимально глупых пожалуй, ибо на них пытался получить ответ в процессе инвестигейта
1. Нужно ли на сервере открыть все порты? Нужно ли для каждого WebSocket Connection-а иметь один конкретный порт? Уже понял, что нет, но подтвердите/опровергните плиз
2. От чего зависит колличество connections, которое мой сервер может поддерживать?
ojab
14.03.2018
13:11:55
нет, websocket'ы устанавливаются как http[s] соединение на соответственный порт и потом апгрейдятся до websocket-соединения, при этом порты не меняются.
количество зависит от мильона параметров
Vasiliy
14.03.2018
13:13:12
порт же вроде переключается, не?
ojab
14.03.2018
13:13:56
не, зачем?
со стороны клиента порт другой, само собой (если это не апгрейд http/2), со стороны сервера — тот же
Roman
14.03.2018
13:17:13
все точно также как и с http, клиент изначально стучится в tcp сокет по ip и порту, потом уже идет разница в протоколах
No
14.03.2018
13:17:25
Для tcp connection-а должен быть уникален следующий кортеж: [src_ip, src_port, dst_ip, dst_port]. Если одному и тому же браузеру нужно несколько коннекшенов к одному серверу и порту - браузер использует другой клиентский порт
Всё верно?
ojab
14.03.2018
13:20:19
да
No
14.03.2018
13:41:40
Окей, спасибо. Вообще всем спасибо за помощь, нирвана/дзен/понимание по данному вопросу достигнуто )