Artem
Люди, кто обладает опытом работы с websocket, объясните пожалуйста, в чем идеологический смысл в го реализовывать для каждого клиента две горутины на чтение и запись через каналы, в чем не кошерность способа применяемого в том же питоне, когда мы в мэп собираем всех клиентов и ожидаем от кого-то из них данные, а потом циклом проходим по всем и пишем им данные. Пока писал, появилась идея, что это связанно с отсутствием конструкции try, catch, я прав?
Daniel
нет
Daniel
это свуязано с синхронностью ввода-вывода в go
randle
Юзает кто-нибудь neo4j в го?
Anonymous
Daniel
Daniel
ввод-вывод в го блокирующий, синхронный
Daniel
соответственно, писать в разные сокеты надо из разных горутин, иначе первая же заблокировавшаяся запись остановит весь цикл
Pawel
Люди, кто обладает опытом работы с websocket, объясните пожалуйста, в чем идеологический смысл в го реализовывать для каждого клиента две горутины на чтение и запись через каналы, в чем не кошерность способа применяемого в том же питоне, когда мы в мэп собираем всех клиентов и ожидаем от кого-то из них данные, а потом циклом проходим по всем и пишем им данные. Пока писал, появилась идея, что это связанно с отсутствием конструкции try, catch, я прав?
при работе с вебсокетом у вас вот эту вот мапу пишут и читают одновременно несколько горутин, Поэтому все обращения к ней должны быть либо через каналы, либо залочены мьютексами
Anonymous
Artem
Я немного не о том. В питоне ввод-вывод тоже блокирующий. Но там это решается через async. Тут через горутины, по сути такой же async. Суть в самом подходе, тут во всех реализациях, которые я видел для го, для клиента стартуем сразу две горутины, вместо того чтобы при появлении данных на сокете, в цикле создавать горутины на отправку, которые после отправки данных самозавершатся
Artem
Artem
https://m.habrahabr.ru/company/mailru/blog/331784/
Artem
Вот тут, как я понимаю, и идёт речь об отказе запуска двух горутины на клиента
Daniel
да
Daniel
но оно перестает быть простым и кросплатформенным
Daniel
зачем это нужно, если ты не мейлру - вопрос открытый
Artem
Ну когда нужна производительность
Daniel
нет
Daniel
производительность не изменится
Artem
Ну либо сервер. Обслуживает 10к клиентов, либо 100к, разница есть
Daniel
опять нет
Daniel
разницу на 10К и 100К вы не увидите
Евгений
Там решалась конкретная задача mail.ru: нужно держать большое количество неактивных веб-сокетов, обновления идут в небольшом % из них. Суть решения - не выделять память и горутины на неактивные соединения. Как только нужно что-то отрпвить, создается нормальная горутина со всеми данными и буферами.
Pawel
Мэп только читают несколько, а пишет только одна, которая апгрейд соединения делает
даже если так - это детали, которые суть картины (конкурентный доступ) не меняют. Но вообще то вебсокет-клиентов > 1, и все они одновременно пишут.
"мы в мэп собираем всех клиентов и ожидаем от кого-то из них данные, а потом циклом проходим по всем и пишем им данные." - вот это вот ни к чему. Правильно - это писать в мапу в каждом обработчике хтттп соединения, устанавливающего вебсокет коннект
Евгений
Если у вас не такой паттерн: активны 5% из 10М, то вам это не нужно.
Daniel
и даже если паттерн такой - все, что вы наэкономите, это RAM
Artem
Artem
Ну собственно вопрос был именно про паттерн реализации задачи в го
Artem
Спасибо всем откликнувшимся
Евгений
там вопрос не в получателях: а вообще в актвиных сокетах - т.е. тех, в которых передаются данные
Евгений
т.е. у вас получается ~100% активных )
Евгений
Я не ругаю решение, оно отличное. Но оно под специфическую задачу - очень редких уведомлений для большой группы клиентов.\
Евгений
одна на все сокеты?
Евгений
и один общий буфер?
Artem
Кстати вот ещё вопрос, в догонку, если я не буду читать то, что шлют мне клиенты, чем это мне грозит?
Daniel
буфер переполнится, сокет закроется
Artem
одна на все сокеты?
Не, там две горутины на клиента, была мысль сделать по одной, только на write
Daniel
еще раз - чтобы что?
Евгений
имхо вы усложните все сильнее, чем выиграете
Artem
еще раз - чтобы что?
Чтобы не тратить ресурсы на чтение, но понял, что не вариант, будем читать в _
Artem
Спасибо всем откликнувшимся, в общих чертах стало понятнее
Niko
Добрый вечер!
В последнее время на web-сервере подозрительная активность
Идут GET запросы:
/.git/HEAD
/tasktracker.jsp
/dfshealth.jsp
/jobtracker.jsp
/flumemaster.jsp
/browseDirectory.jsp
/status.jsp
/master.jsp
Мой проект кто-то пытается взломать?
Anonymous
Anonymous
у меня такое начинается сразу после аренды VPS у любого провайдера через пару дней
Aleksandr
Anonymous
IP в освновном китайские
Alexey 〒.
Anatoly
бурят брутят
Niko
Просто таких запросов в последнее время становится все больше
Mike
Илья
зарули jsp в blackhole
Mike
Или всех кто джсп просит бань
Alexey 〒.
Niko
А что еще?
Anonymous
по идее должен быть уже какой-то модуль для бана вот сканнеров
Anonymous
А что еще?
ну пробивают phpMyAdmin, дырки в CMS: Joomla, WordPress; уязвимость shellshock к примеру
Anonymous
самое распространённое дырявое ПО в двух словах
Alexey 〒.
Anonymous
возвращай zip-бомбу)
кстати идея))) если как-то узнать ПО сканера, то можно поискать дыры в нём и поэкспериментировать с овтетами, может получиться довольно забавно)
Alexey 〒.
https://habrahabr.ru/post/332580/
Niko
Всем спасибо за направления в нужные русла))) пошел читать
Alexey 〒.
Смотря что чекают
Alexey 〒.
может контент на странице
Constantine️
Constantine️
может тупо формы сабмитят
Konstantin
парни никто opencv3 не юзает на go?
Alexey 〒.
Мерль
GopherCon 2017: Alan Shreve - grpc: From Tutorial to Production https://youtu.be/7FZ6ZyzGex0 #golang
Мерль
http://gocv.io/ is making OpenCV 3 easier for #golang devs, e.g. face detection in 60 lines of Go.
By… https://twitter.com/i/web/status/917554768402354177