
cptn_foxmk
06.06.2016
07:55:33
https://www.youtube.com/watch?v=SRvm3zQQc1Q

Viktor
06.06.2016
07:55:43
пасиб, посмотрю

Kirill
06.06.2016
07:56:14
тем более, помни, масштабироваться проект должен твой - а масштабируется TCP лучше


Dmitry
06.06.2016
19:28:32
привет всем!
если будет у кого-то пару минут порассуждать над проблемой, буду рад!
ситуация такая:
- пишу на заказ приложение, со встроенным месенжером
- основным каналом передачи данных являются веб сокеты
- один человек, может быть подключен с нескольких устройств - каждое устройство имеет свое вебсокет соединение
необходимо иметь возможность:
1) помечать юзеров онайн они или нет (если хотя бы одно устройство держит соединение, то человек онлайн)
2) знать, когда пользователь впоследний раз был онлайн
кто как бы реализовывал данные фичи онлайн пользователей?
я для прототипа запилил инкеремнтальное поле в редисе для подсчета устройств, которые держат соединения с сервером: соединение появилось +1, соединение пропало - 1
но вижу недостатки данной реализации, хотя есть одно реально красивое приемщество: очень легко доставить поле из редиса, онлайн ли пользователь или нет

Google

Viktor
06.06.2016
19:31:24
Привет
А почему не использовать память самого приложения для хранения инкремент данных?

Dmitry
06.06.2016
19:34:34
я думал над таким вариантом, но т.к. это месенжер, есть вероятность, что будет несколько серваков для конектов, соответственно запуститься несколько приложений на разных серваках и не понятно, и будет размазано хранилище инфы об онлайнах
поэтому решил, что стоит хранить централизовано в какойто БД (пока в редисе)
к тому же, дату последнего конекта стоит хранить точно в бд, т.к. приложение может упасть
сейчас думаю над вариантом хранить записи именно о сессиях пользователе (одно устройство = 1 сессия)
и каждый обработчик вебсокет соединений должен пинговать базу и сообщать о том, что он не отвалился
беда такого варианта в том, что часто не попингуешь, а задержку по онлайн/оффлайн хочется иметь как у телеграма: закрыл последний конект и сразу у всех светишься, как офлайн

Nikita
06.06.2016
19:48:41
Что то я запутался. Зачем обработчикам пинговать базу?)

Igor ⛷
06.06.2016
19:51:28
если уж распределнные сервера, то для мобилок вебсокеты не очень

Dmitry
06.06.2016
19:55:04

Denis
06.06.2016
19:56:33
что не так с пинг понгом? почему часто нельзя пинговать? собственный пинг понг в вебсокетах это почти стандарт, так как tpc keep alive, в случаях использования прокси, может работать только от прокси до клиента, но от сервера до прокси - нет, или наоборот, а если у вас есть высокие нагрузки, то у вас будет тот или иной вид проксирования\балансировки
еще минус, человек может выйти из приложения, но не закрывать его (но я хз что у вас), по факту он офлайн, но соединение висит (в будущем вам может пригодиться такой кейс, нотификация и прочее)
Почему просто не послать мессагу "я вышел"? (то есть вы мгновено узнаете, что клиент офлайн) В случаях обрыва чекаюте пинг понгом (узнаете что офлайн, только в случае отстутствия ответа на пинг, то есть не мгновенно, но это не критично, так как будет происходить не так часто)


Igor ⛷
06.06.2016
19:59:49
а почему?)
потому что, я, например, не в курсе качества библиотек на мобильных платформах под ws, у нас ребята использовали свои протоколы овер tcp, или могу узнать подробно, какие либы


Dmitry
06.06.2016
20:00:18
что не так с пинг понгом? почему часто нельзя пинговать? собственный пинг понг в вебсокетах это почти стандарт, так как tpc keep alive, в случаях использования прокси, может работать только от прокси до клиента, но от сервера до прокси - нет, или наоборот, а если у вас есть высокие нагрузки, то у вас будет тот или иной вид проксирования\балансировки
еще минус, человек может выйти из приложения, но не закрывать его (но я хз что у вас), по факту он офлайн, но соединение висит (в будущем вам может пригодиться такой кейс, нотификация и прочее)
Почему просто не послать мессагу "я вышел"? (то есть вы мгновено узнаете, что клиент офлайн) В случаях обрыва чекаюте пинг понгом (узнаете что офлайн, только в случае отстутствия ответа на пинг, то есть не мгновенно, но это не критично, так как будет происходить не так часто)
когда приложение сворачивается, мы с разрабом клиента договорились рвать соеднинение - все нотификации пойдут стандартными пуш нотификациями


Denis
06.06.2016
20:01:15
ну и в чем проблема?

Google

Dmitry
06.06.2016
20:01:17
ну и в чем проблема?
как часто сервак должен пинговать базу по каждой сессии, чтобы при сворачивании приложения мы практически сразу увидели, что юзер оффлайн?
ну и в чем проблема?
в этом и проблема: очень часто (каждую секунду)
получается, что каждый подключенный долбится постоянно в редис только с одной просьюбой, считать его живым
считаю это очень жирным) но есть вероятность, что единственный норм вариант

Igor ⛷
06.06.2016
20:05:10

Denis
06.06.2016
20:05:15
так делайте редкий пинг понг, но юзайте служебные сообщения, свйо мини протокол овер вебсокет
клиент перед выходом шлет мессагу, и тогда происхоит процесс проверки других активных клиентов от этого юзера, если их нет помечаете его офлайн
это будет происхдить не каждый пинг понг

Dmitry
06.06.2016
20:08:07

Anton
06.06.2016
20:25:51
Слышь пацаны
у меня как у человека не знакомого с Go на высоком уровне возник вопрос
в Go как происходит управление памятью? Там все основано на смарт-поинтерах, или есть сборщик мусора?
Посвятите в таинство

Чай С Лимоном
06.06.2016
20:27:13
есть сборщик мусора вроде как

Igor
06.06.2016
20:27:54
все на сборщике

Чай С Лимоном
06.06.2016
20:28:24
https://habrahabr.ru/post/262335/

Anton
06.06.2016
20:29:44
Кек
ясненько
хотя и немного странно
спасибо за инфу

Google

cptn_foxmk
06.06.2016
21:04:40
там свой мини-рантайм и да, сборщик, как уже сказали
с другой стороны, если пишешь утилитку, которая работает 5-10-15 минут, его можно вырубить

Nik
06.06.2016
21:48:36
народ
а можно а стандартном json в golang
делать комментарии
или всегда будет спотыкаться?

Alexandr
06.06.2016
22:02:00

Denis
06.06.2016
22:02:07
всегда спотыкаться, json как спецификация не поддерживает комменты, как вариант использовать препарсер, который будет стрипить комменты

Nik
06.06.2016
22:02:39
Боль, вот не хотел это костылить
Хотя чё нашел
JSON5
Вроде по умолчанию поддерживает комменты

Denis
06.06.2016
22:05:01
а вы для обмена данными json используете или для конфигурации?

Nik
06.06.2016
22:05:45
Для входных данны
Описание правил
Вот вообще ща почитал, оказывается YAML покрывает json
Ща попробую, если тупо смнею либу, рухнет или нет софтина моя
Не хочу рефакторить, там много

cptn_foxmk
07.06.2016
08:26:33
ребят, не желаете похоливарить?)
кто каким редактором пользуется?

Google

Nikita
07.06.2016
08:26:55
vim конечно)

cptn_foxmk
07.06.2016
08:27:22
я просто в очередной раз пытался привыкнуть к емаксу, но задолбался, не идет :(
vim в консоли и на удаленке
на десктопе не нравится, модальный режим сильно сбивает с толку, опять же, так и не смог привыкнуть
сейчас выбираю между атомом и VSCode

Nikita
07.06.2016
08:28:49
Тоже самое. Когда заинтересовался лиспом, некоторое время сидел с емаксом, но не смог привыкнуть, вернулся на вим.

[Anonymous]
07.06.2016
08:28:50

Nikita
07.06.2016
08:29:01
В VSCode плохой вим-плагин

[Anonymous]
07.06.2016
08:29:08

Denis
07.06.2016
08:29:21
intellij + go plugin

Admin
ERROR: S client not available

3bl3gamer
07.06.2016
08:29:24

Igor
07.06.2016
08:29:34

cptn_foxmk
07.06.2016
08:29:55
против лиспа как раз ничего не имею: основные проблемы емакса это раскладка, сервер и интерфейсные косяки
сейчас в основном пользуюсь IDEA, так как пишу на Scala/Java/Go

Артем
07.06.2016
08:31:24
вам не надоело?

cptn_foxmk
07.06.2016
08:31:35
плюсы за атом: там не просто jsonки, а полноценный язык (хоть и кофескрипт)

3bl3gamer
07.06.2016
08:31:47

Alexander
07.06.2016
08:32:10
а смысл?

Google

Alexander
07.06.2016
08:32:22
хоть catом пользуйся, какая разница то? :)

Alexandr
07.06.2016
09:14:30
Sublime для Go

Kirill
07.06.2016
09:15:36

Anton
07.06.2016
09:16:03
на маке саблайм и пробую постепенно vscode. по ssh VIM

Lev
07.06.2016
09:24:09
и всё же не понимаю, почему люди не любят liteide?
по мне так вполне хватает.

Чай С Лимоном
07.06.2016
09:29:09

[Anonymous]
07.06.2016
09:32:17
Написал им в гитхаб недели две назад, но так и не исправили еще

Lev
07.06.2016
09:33:09
ну да, это есть. Debug и Continue косячат

[Anonymous]
07.06.2016
09:33:29
Ждем ide на Go))

3bl3gamer
07.06.2016
09:34:55

[Anonymous]
07.06.2016
09:40:43

Плюшка
07.06.2016
09:41:42
Языки обычно не просто так плодятся, они, как правило, не плод задумчивого ковыряния в носу от нечего делать, а попытка выражения идей более оптимальным способом, нежели уже существующие языки. Ну и, естественно, на всё это наслаиваются какие-то внутренние тараканы авторов.
хех. ну раз пошла такая пьянка - попробуй написать на Java для микроконтроллера... к примеру, управлялку теплоизлучателями и освещением исходя из показаний датчиков, времени и текущих пользовательских настроек . докажи, что не ты не горе-программист и на всём пишешь - как дышишь. а потом перепиши это на перле или на PL/I или на Ada. а потом на plain С.
даже на питоне для мк пишут же
и на lua


Lev
07.06.2016
09:42:12
дело не в том, что пишут или не пишут, а в том, что каждый язык имеет свои фишки, которые накладывают свои особенности. например на golang классно в многопоточность, но практически никак в полиморфизм и наследование. в питоне клёво с объектами и их runtime-манипулированием, но пипец если вдруг большие размеры данных, пусть даже они простые инты будут.

Kirill
07.06.2016
09:46:54
У Го охрененный полиморфизм и сложно с многопоточностью, а наследование не "почти никак" - его совсем нет ;)

Lev
07.06.2016
09:47:16
Ada замечательно почти везде, но по первой надо ломать мозг в районе ООП. C/C++ - ещё круче - но надо знать, что если накосячил - то тебе поможешь только ты сам. ну и ещё мабыть gdb или какой-нибудь leakcheck-ер

Плюшка
07.06.2016
09:49:11
шарп рулит же

Lev
07.06.2016
09:49:46
и шарп тоже рулит. и всё что поверх llvm - рулит. да куча всего рулит =)