Pull to refresh
14
0
Александр Разумов @cy-ernado

Руковожу разработкой

Send message

Можно просто отдельный TURN сервер поставить, не обязательно же мультиплексировать на 443 порту.


Узнавать нужно будет STUN и TURN ChannelData.

Если TURN сервер будет на 443 порту и работать через TCP/TLS (на случай блока UDP), то должен подойти в качестве релея в таком случае.

Тоже хочу поделиться своей имплементацией STUN, но уже на go:
gortc/stun (сам протокол, клиент с поддержкой RTO, хорошо покрыт тестами, включая end-to-end и fuzzing), gortc/turn (уже для TURN, влючая ChannelData), ну и собствено сервер: gortc/gortcd (поддержка STUN, TURN, e2e тесты через relayed webrtc).


А еще есть парсер RFC 4566 SDP.

У меня была проблема с MTU, в tcpdump-е было что-то вроде:


ICMP x.x.x.x unreachable - need to frag (mtu 1426), length 556

Пробовал устанавливать MTU на GRE-интерфейсе (и вообще где торько можно), не получалось.
Долго искал решение, помогло только добавление tcp-mss для интерфейсов GRE, например:


/ip firewall mangle
add action=change-mss chain=forward new-mss=1300 out-interface=gre passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1420-65535
add action=change-mss chain=forward new-mss=1300 in-interface=gre passthrough=yes protocol=tcp tcp-flags=syn tcp-mss=1420-65535

Некоторые БП поддерживают работу без активного охлаждения на малой нагрузке, я для этого брал, например.

Круто!


А сгенерированный код проходит без изменений gofmt? Я сделал gofmt -s -w на efaceconv/example и получил довольно большой diff.

Хотя нет, Safari "по слухам" "going to support WebP in iOS 10 and macOS Sierra", так что скоро ситуация может измениться.

Mozilla, Apple и Microsoft крайне маловероятно когда-нибудь задумаются о поддержке этого формата, и по большому счету это только политическое решение.
Никаких технических ограничений нет, в багтрекере мозиллы поддержка webp висит уже давно.
Но даже в такой ситуации "только" 70% поддержки.

А вы когда-нибудь расскажете про SCTP, DTLS, ICE и прочие внутренности WebRTC?

npm install тормозит скорее из-за того, что принято даже очень небольшие сущности выносить в модуль.
Зато графики по количеству модулей красивые и всех обгоняют.

Хорошо, когда можно сделать go fmt и никаких споров :)

А смысл? При классическом подходе, пул тредов создаётся как раз чтобы обрабатывать I/O операции. Асинхронность решает эту проблему гораздо эффективнее без тредов.

Я плохо умею объяснять, более того, мои примеры могут показаться кому-то бредом фанатика другого языка, поэтому приведу в пример nginx:
Пулы потоков: ускоряем NGINX в 9 и более раз

Вроде бы там мотивация для пулов потоков описана.
При использовании нескольких процессов GIL'а нет

Я и не говорил обратного.

А треды, где GIL есть, использовать не особо и нужно

И про треды я не говорил.
Можно бы было сделать пул из тредов и по ним распределять нагрузку, при этом используя ивентлуп.

Судя по реакции на мой коммент, позиция оппонентов заключается в том, что многоядерность не нужна, всем хорошо в одном треде, масштабирование через создание процессов всех устраивает, а GIL не является проблемой, я правильно понимаю?
Необходимо уточнить, что это на одном ядре, хоть результаты и впечатляют.
GIL никуда не девается, что печально.
сравнение go с его главным конкурентом по потреблению ресурсов — nodejs.

Судя по опыту миграции некоторых компаний с nodejs на go (Digg, VK), нода конкурентом не является.
У меня есть сервер, на которым запущены debian, веб-приложение на Go (с использованием fasthttp) и nginx.
Веб-приложение кушает 3640 килобайт.

image
Может быть получится с помощью «reuseport»
Если необходим действительно быстрый http на Go:
https://github.com/valyala/fasthttp

Кстати, у Go есть достойная Lua VM:
https://github.com/yuin/gopher-lua

Сам сейчас в раздумьях, какую k-v использовать в своих проектах для решения различных задач. На работе мы используем свои биндинги к LMDB, для меня это не подходит, т.к. мне нужна кросс-компиляция в некоторых случаях. Посмотрел на tarantool — ручной шардинг мне не понравился, хочется чтобы «оно само».

Из интересных проектов, есть еще tikv:
https://github.com/pingcap/tikv

Распределенная key-value c транзакциями на Rust, которая будет использоваться в качестве бекенда для другого проекта (tidb) на го.
Я хочу использовать внутри только IPv6, чтобы не занимать (и не платить за) IPv4 адреса.
+ экспериментирую с tedero/6to4, разрабатываю на ранней стадии p2p софт, который должен будет поддерживать ipv6.
Еще бы хотелось возможность использовать сразу 2 ipv4 адреса для STUN сервера, но это не обязательно.
А где можно по-подробней узнать? Интересно стало :)

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity