Да вызов будет дороже, чем вызов гошной функции, но это не совсем тоже самое что cgo медленный. Медленным это будет при очень частом обращении к импортированным функциям и насколько это критично уже зависит от конкретной задачи.
точно, в глянул в оригинале, там повторное кодирование строки, если длина не та
это ж пипец
// formatPAXRecord formats a single PAX record, prefixing it with the
// appropriate length.
func formatPAXRecord(k, v string) string {
const padding = 3 // Extra padding for ' ', '=', and '\n'
size := len(k) + len(v) + padding
size += len(strconv.Itoa(size))
record := fmt.Sprintf("%d %s=%s\n", size, k, v)
// Final adjustment if adding size field increased the record size.
if len(record) != size {
size = len(record)
record = fmt.Sprintf("%d %s=%s\n", size, k, v)
}
return record
}
подобные вещи я и имел в виду
предположу, чтобы подобное реализовать, потребуется реализация HTTP на PHP и работа с удаленным сервером через сокет. дальше, наверное, потребуется асинхронная работа с диском, БД…
на nodejs с этим проблем не будет
можно использовать Go, но это тема для холивара )
Логичный вопрос — смена версии даст сильный прирост или нет?
для вебсокетного сервиса на PHP по скорости вряд ли, по памяти точно
Шутки не понял, если у меня сервер на php то мне будет сложно правильно использовать сторонние (но не невозможно само собой), а значит реализация именно серверной части с обслуживанием подключений и пользователей будет на php, гугл выдает с десяток реализаций.
да не было никакой шутки
да можно, решения есть, но при поддержке такого решения постоянно придется решать проблемы, которые давно уже решены.
php-шнику на том же nodejs ws-сервис сделать не сложнее чем на php, если не проще. и экосистема там богаче в этом плане, это его ниша.
А мне не очень. API довольно таки скудный.
Да, универсально, пул под капотом, потокобезопастность тоже…
с другой стороны (это то что наболело)
— пул плохо настраивается, макс кол-во соединений и макс. кол-во простаивающих соединений и все, а я бы хотел задать мин. кол-во простаивающих соединений, кол-во соединений при старте, чтобы не ждать пока соединение откроется
— средств профайлинга нет. измерить время выполнения запросов можно и снаружи, а вот какие затраты были на установку соединения при вызове db.Query и были ли вообще — непонятно
— следствия универсальности: нет доступа к спец. возможностям субд, нельзя получить из пула соединение. Даже если разработчик драйвера предоставит методы для работы с API, то надо предоставлять механизмы для создания соединений и отдельный пул, т.к. к стандартному доступа нет. А если такое случится, то нафига тогда database/sql/
— с логированием, если ошибаюсь, тоже никак
зависит от задачи
мой ответ можно расценивать как расшифроку что понималось под фразой «4. Для работы с веб в Го достаточно стандартных пакетов из коробки.»
зы
не агитирую за го, но если конкретизируешь «полезную работу», может смогу что-то пояснить.
— FROM scratch для go приложений
отличный результат на 1.9 надо переходить
это ж пипец
ps
формат PAX record весьма неудачен, имха
pps
CL автора такие не принят
как я понял size так же учитывает и свою собственную длину в строковом представлении
а что будет, если len(k) + len(v) + padding = 99 ??
у хрома по процессу на вкладку, естественно память вернется при завершении процесса
уберите лишнее
предположу, чтобы подобное реализовать, потребуется реализация HTTP на PHP и работа с удаленным сервером через сокет. дальше, наверное, потребуется асинхронная работа с диском, БД…
на nodejs с этим проблем не будет
можно использовать Go, но это тема для холивара )
По второму — все так.
для вебсокетного сервиса на PHP по скорости вряд ли, по памяти точно
да не было никакой шутки
да можно, решения есть, но при поддержке такого решения постоянно придется решать проблемы, которые давно уже решены.
php-шнику на том же nodejs ws-сервис сделать не сложнее чем на php, если не проще. и экосистема там богаче в этом плане, это его ниша.
Да, универсально, пул под капотом, потокобезопастность тоже…
с другой стороны (это то что наболело)
— пул плохо настраивается, макс кол-во соединений и макс. кол-во простаивающих соединений и все, а я бы хотел задать мин. кол-во простаивающих соединений, кол-во соединений при старте, чтобы не ждать пока соединение откроется
— средств профайлинга нет. измерить время выполнения запросов можно и снаружи, а вот какие затраты были на установку соединения при вызове db.Query и были ли вообще — непонятно
— следствия универсальности: нет доступа к спец. возможностям субд, нельзя получить из пула соединение. Даже если разработчик драйвера предоставит методы для работы с API, то надо предоставлять механизмы для создания соединений и отдельный пул, т.к. к стандартному доступа нет. А если такое случится, то нафига тогда database/sql/
— с логированием, если ошибаюсь, тоже никак
мой ответ можно расценивать как расшифроку что понималось под фразой «4. Для работы с веб в Го достаточно стандартных пакетов из коробки.»
зы
не агитирую за го, но если конкретизируешь «полезную работу», может смогу что-то пояснить.
https://golang.org/pkg/encoding/json/
но, при определенных условиях это не так