mirror of
https://github.com/by-sonic/tglock.git
synced 2026-09-05 18:16:09 +03:00
Скрипт воркера писал в сокет Telegram так:
server.addEventListener("message", (event) => {
writer.write(chunk).catch(shutdown);
});
`write()` вызывался поверх незавершённого, `writer.ready` не спрашивался вовсе.
Пока в клиенте голодала отправка, настоящего потока вверх через воркер не
возникало, и код держался. В beta.12 голодание починили — поток появился, и
репортёр #42 сразу получил переподключения на обоих клиентах, которых на
beta.11 с тем же воркером не было.
Запись сериализована цепочкой промисов: следующий чанк уходит после того, как
записан предыдущий, и только когда писатель готов. Кто разворачивал воркер
раньше — нужен передеплой, о чём сказано в docs/CLOUDFLARE_WORKER.md.
Причина у репортёра не подтверждена: рантайма Workers у меня нет, проверить
можно только у него.
Заодно счётчик «промолчали». Соединение, которое открылось и ничего не
прислало за `IO_TIMEOUT`, закрывалось и не попадало ни в один счётчик:
`unknown_clients` растёт, только когда запрос пришёл и не разобрался, а не
когда его не дождались. Тот же репортёр сообщил, что его телефон
переустанавливает соединение примерно раз в десять секунд — ровно период
`IO_TIMEOUT`. Проверить это по диагностике было нечем, теперь есть чем.
Тесты: Ping через туннель (путь не был покрыт вовсе, а Ping бывает только на
маршруте воркера) и молчащий клиент. Второй гоняет виртуальное время, чтобы не
ждать десять секунд по-настоящему, — отсюда dev-зависимость на tokio/test-util.
Co-authored-by: by-sonic <171230345+by-sonic@users.noreply.github.com>
This commit is contained in:
@@ -233,6 +233,14 @@ Worker должен принимать WebSocket на:
|
||||
добавить собственную авторизацию до стабильного релиза; поэтому Worker
|
||||
остаётся расширенной опцией alpha-версии.
|
||||
|
||||
Запись в сокет Telegram обязана быть последовательной: следующий чанк уходит
|
||||
после того, как записан предыдущий, и только когда писатель к этому готов
|
||||
(`writer.ready`). В `worker/tglock-worker.js` этого не было — `write()`
|
||||
вызывался поверх незавершённого, без backpressure. Пока в клиенте голодала
|
||||
отправка, настоящего потока вверх через воркер не возникало и это не
|
||||
проявлялось; после того как голодание починили, поток появился. Кто разворачивал
|
||||
воркер раньше — обновите скрипт.
|
||||
|
||||
## Current limitations
|
||||
|
||||
- SNI camouflage не включена: небезопасное отключение hostname verification
|
||||
@@ -255,5 +263,9 @@ Worker должен принимать WebSocket на:
|
||||
CLI собирается одной командой. Подробно — в разделе README про антивирус.
|
||||
- Работоспособность медиа зависит от конкретного DC аккаунта и доступности
|
||||
Telegram/Cloudflare у провайдера.
|
||||
- Соединение, открытое клиентом и молчащее дольше `IO_TIMEOUT` (10 секунд),
|
||||
закрывается. Для клиента, открывающего соединения про запас, это норма; счётчик
|
||||
«промолчали» показывает, как часто это происходит, — раньше такие соединения
|
||||
не попадали никуда.
|
||||
- Пулы заранее открытых WebSocket-соединений будут добавлены после измерения,
|
||||
что они не создают лишнюю нагрузку и не ухудшают стабильность.
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
Если вернулось `not found` — проверь, что путь именно `/apiws`. Если ошибка про `cloudflare:sockets` — у воркера слишком старая дата совместимости, поставь в **Settings → Compatibility date** сегодняшнюю.
|
||||
|
||||
> **Разворачивал воркер до 2.0.0-beta.14 — обнови скрипт.** В прежней версии запись в сокет Telegram шла без ожидания предыдущей и без backpressure. Пока в клиенте голодала отправка, через воркер не проходило настоящего потока вверх и это не проявлялось; после того как голодание починили в beta.12, поток появился.
|
||||
|
||||
## Подключение в TGLock
|
||||
|
||||
**В приложении:** Настройки → поле **Cloudflare Worker** → вставь `tglock.имя.workers.dev` → Сохранить. Настройки меняются только при выключенной защите.
|
||||
|
||||
Reference in New Issue
Block a user