Тоже хочу поделиться своей имплементацией STUN, но уже на go: gortc/stun (сам протокол, клиент с поддержкой RTO, хорошо покрыт тестами, включая end-to-end и fuzzing), gortc/turn (уже для TURN, влючая ChannelData), ну и собствено сервер: gortc/gortcd (поддержка STUN, TURN, e2e тесты через relayed webrtc).
У меня была проблема с MTU, в tcpdump-е было что-то вроде:
ICMP x.x.x.x unreachable - need to frag (mtu 1426), length 556
Пробовал устанавливать MTU на GRE-интерфейсе (и вообще где торько можно), не получалось.
Долго искал решение, помогло только добавление tcp-mss для интерфейсов GRE, например:
Mozilla, Apple и Microsoft крайне маловероятно когда-нибудь задумаются о поддержке этого формата, и по большому счету это только политическое решение.
Никаких технических ограничений нет, в багтрекере мозиллы поддержка webp висит уже давно.
Но даже в такой ситуации "только" 70% поддержки.
npm install тормозит скорее из-за того, что принято даже очень небольшие сущности выносить в модуль.
Зато графики по количеству модулей красивые и всех обгоняют.
А смысл? При классическом подходе, пул тредов создаётся как раз чтобы обрабатывать I/O операции. Асинхронность решает эту проблему гораздо эффективнее без тредов.
Я плохо умею объяснять, более того, мои примеры могут показаться кому-то бредом фанатика другого языка, поэтому приведу в пример nginx: Пулы потоков: ускоряем NGINX в 9 и более раз
А треды, где GIL есть, использовать не особо и нужно
И про треды я не говорил.
Можно бы было сделать пул из тредов и по ним распределять нагрузку, при этом используя ивентлуп.
Судя по реакции на мой коммент, позиция оппонентов заключается в том, что многоядерность не нужна, всем хорошо в одном треде, масштабирование через создание процессов всех устраивает, а GIL не является проблемой, я правильно понимаю?
Сам сейчас в раздумьях, какую k-v использовать в своих проектах для решения различных задач. На работе мы используем свои биндинги к LMDB, для меня это не подходит, т.к. мне нужна кросс-компиляция в некоторых случаях. Посмотрел на tarantool — ручной шардинг мне не понравился, хочется чтобы «оно само».
Я хочу использовать внутри только IPv6, чтобы не занимать (и не платить за) IPv4 адреса.
+ экспериментирую с tedero/6to4, разрабатываю на ранней стадии p2p софт, который должен будет поддерживать ipv6.
Еще бы хотелось возможность использовать сразу 2 ipv4 адреса для STUN сервера, но это не обязательно.
Можно просто отдельный 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-е было что-то вроде:
Пробовал устанавливать MTU на GRE-интерфейсе (и вообще где торько можно), не получалось.
Долго искал решение, помогло только добавление tcp-mss для интерфейсов GRE, например:
Некоторые БП поддерживают работу без активного охлаждения на малой нагрузке, я для этого брал, например.
Круто!
А сгенерированный код проходит без изменений
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
и никаких споров :)Я плохо умею объяснять, более того, мои примеры могут показаться кому-то бредом фанатика другого языка, поэтому приведу в пример nginx:
Пулы потоков: ускоряем NGINX в 9 и более раз
Вроде бы там мотивация для пулов потоков описана.
Я и не говорил обратного.
И про треды я не говорил.
Можно бы было сделать пул из тредов и по ним распределять нагрузку, при этом используя ивентлуп.
Судя по реакции на мой коммент, позиция оппонентов заключается в том, что многоядерность не нужна, всем хорошо в одном треде, масштабирование через создание процессов всех устраивает, а GIL не является проблемой, я правильно понимаю?
GIL никуда не девается, что печально.
Судя по опыту миграции некоторых компаний с nodejs на go (Digg, VK), нода конкурентом не является.
Веб-приложение кушает 3640 килобайт.
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) на го.
+ экспериментирую с tedero/6to4, разрабатываю на ранней стадии p2p софт, который должен будет поддерживать ipv6.
Еще бы хотелось возможность использовать сразу 2 ipv4 адреса для STUN сервера, но это не обязательно.