- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function test() {
const ws = new WebSocket('ws://127.0.0.1:445');
ws.addEventListener('close', event =>
console.log('event.code = ', event.code, '; event.reason = ', event.reason)
);
ws.close(3500, 'some reason');
}
test();
ISO 10.02.2022 19:16 # 0
bormand 10.02.2022 19:22 # 0
ISO 10.02.2022 19:24 # 0
UPD: в качестве подсказки разрешается почитать https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close.
bormand 10.02.2022 19:26 # 0
ISO 10.02.2022 19:31 # 0
Нет.
> Ведь в close аргументы для отправки на сервер?
Нет.
bormand 10.02.2022 19:34 # 0
ISO 10.02.2022 19:35 # 0
ObeseYoung 10.02.2022 19:43 # 0
bormand 10.02.2022 19:37 # 0
> Нет.
А для чего они тогда, если не для отправки Close Frame серваку?
ISO 10.02.2022 19:39 # 0
bormand 10.02.2022 19:41 # 0
Explaining to whom? Не самому себе же?
ISO 10.02.2022 19:50 # 0
guest6 10.02.2022 19:42 # 0
локализовать удобно
блядь, что за проблемы как в PHP в 1999м году?
bormand 10.02.2022 19:43 # +1
Нинужно.
This data is not necessarily human readable but may be useful for debugging or passing information relevant to the script that opened the connection. As the data is not guaranteed to be human readable, clients MUST NOT show it to end users.
guest6 10.02.2022 19:48 # +1
?
Кстати, за локализацию ошибок сотрудники Microsoft и авторы PostgreSQL будут гореть в аду миллард лет.
BEKTOPHblu_nETyX 10.02.2022 20:33 # 0
> This data is not necessarily human readable
bormand 10.02.2022 20:36 # 0
guest6 10.02.2022 20:38 # 0
guest6 10.02.2022 19:26 # 0
Вангую
https://github.com/Luka967/websocket-close-codes
CLOSED_NO_STATUS або Unsupported payload ли CLOSE_PROTOCOL_ERROR
ISO 10.02.2022 19:32 # 0
ISO 10.02.2022 19:40 # 0
bormand 10.02.2022 20:21 # 0
bormand 10.02.2022 20:25 # 0
ISO 10.02.2022 20:50 # 0
На самом деле есть, только эта связь — ID.
Реальный пример:
Ничего не подозревающий веб-петух пишет логику для ручного разрыва вебсокетов, в функции для восстановления связи после обрыва проверяет, что обрыв не был ручным… А потом получает вечный цикл, потому что проверка работает только тогда, когда ручной разрыв происходит у уже подключённого сокета. И ведь в 99% случаях всё прекрасно работает, сука!
bormand 10.02.2022 20:59 # 0
Или под "ручным" имеется в виду разрыв со стороны сервера, когда сервак явно говорит "уходи и не возвращайся"?
ISO 10.02.2022 21:06 # 0
И да, это не я писал, я в этом баг искал.
bormand 10.02.2022 21:48 # 0
Ну х.з. как оно там прекрасно работает. Целый раундтрип должен пройти успешно чтобы разрыв зафиксировался. Любая проблема в любой промежуточной точке от отправки до получения -- добро пожаловать в вечный реконнект.
И самое главное -- а нафиг всё это, если можно просто флаг заюзать?
ISO 10.02.2022 21:56 # 0
Потому что асинхронщина во все поля. Заебёшься с флагами.
bormand 10.02.2022 22:01 # 0
ISO 10.02.2022 22:06 # 0
bormand 10.02.2022 21:09 # 0
Деталь реализации конкретного сервака ведь...
bormand 10.02.2022 20:40 # 0
guest6 10.02.2022 20:41 # 0
bormand 10.02.2022 20:43 # 0
Т.е. для мультиплексирования всё равно будут какие-то внешние или внутренние хедера. И не было никакого смысла усложнять протокол.
guest6 10.02.2022 20:45 # 0
https://datatracker.ietf.org/doc/html/draft-ietf-hybi-websocket-multiplexing
bormand 10.02.2022 20:47 # 0
guest6 10.02.2022 20:49 # +1
ISO 10.02.2022 20:52 # 0
bormand 10.02.2022 20:54 # 0
Дык там ещё и сами сообщения на фреймы побиты. Внутри потока, побитого на TLS фреймы, побитые на TCP фреймы. Интересно, насколько эффективно вся эта срань взаимодействует и не налетает ли она на какие-нибудь лаги в духе знаменитого send-send-receive.
guest6 10.02.2022 20:56 # 0
ObeseYoung 10.02.2022 20:57 # +1
Сегменты же. Фреймы канают только на канальном уровне.
BEKTOPHblu_nETyX 10.02.2022 21:08 # 0
guest6 10.02.2022 21:10 # 0
bormand 10.02.2022 21:27 # 0
ISO 10.02.2022 20:58 # 0
> TCP фреймы
Дык к ним на уровне ОС доступа нет. Для пользователя (программы) TCP — это чистый поток байт.
bormand 10.02.2022 21:01 # 0
guest6 10.02.2022 21:05 # +3
Кууууик
guest6 10.02.2022 20:56 # 0
ISO 10.02.2022 21:00 # 0
Да. Собственно, «WebSocket» так и делает.
> А причем mime бондари к TCP?
Потому что mime бондари — это блядский костыль, возникший из-за того, что «HTTP» принципиально не умеет в разделение одного запроса на логические сообщения, а «HTTP» это не умеет в том числе и потому, что TCP — это ёбанный поток байт.
guest6 10.02.2022 21:03 # 0
Почтовое сообщение мало того, что должно быть семибитным, так еще и должно в этом тексте как-то передать сообщение и аттачи.
https://datatracker.ietf.org/doc/html/rfc1521
А уже оттуда он перекочевал в веб
ISO 10.02.2022 21:07 # 0
Ладно, ладно, потому что mime бондари — это блядский костыль, возникший в «HTTP» из-за того, что «HTTP» принципиально
guest6 10.02.2022 21:09 # 0
ISO 10.02.2022 21:17 # 0
Я всё ещё не могу без ёбанного мультипарта послать один POST на /crud/kurochka, в котором у меня будут лежать три фотографии курочки.
guest6 10.02.2022 21:24 # 0
bormand 10.02.2022 21:25 # 0
А один POST это как одна транзакция.
guest6 10.02.2022 21:27 # 0
Ну то есть руками шукать бондари в куче говна не нужно, если ты не пишеш свой фреймворк
bormand 10.02.2022 21:28 # 0
guest6 10.02.2022 21:32 # 0
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html
bormand 10.02.2022 21:36 # 0
guest6 10.02.2022 21:42 # 0
Всё таки "в джаве делают руками" может оказаться слишком сильным утверждением
ISO 10.02.2022 21:31 # 0
Да, я могу послать эти три фотки тремя запросами, только вот:
1. На сервере вместо одной простой курочки появляется новая сущность — «незаконченная курочка». Её нельзя отдавать в GET, нужно обновлять через POST (привет, грубое нарушение сёмантики), и хуй знает, что делать, если клиент пошлёт PUT.
2. А где мы будем хранить незаконченных курочек — в БД (уродуем таблицы, добавляем флаги/нуллабельность/новые таблицы для незаконченных сущностей...) или в памяти сервера (нужно писать кучу дополнительного говна в репозиториях)?
3. А что мы будем делать с незаконченными курочками?
4. А как мы будем финализировать курочек?
Вместо простой и понятной модели — «один запрос — одна сущность» — у нас появляется море дерьма.
guest6 10.02.2022 21:33 # 0
Если нужен протокол для создания курочек на сервере, то логично придумать ему расширение для посылки массива курочек
ISO 10.02.2022 21:40 # 0
> Если нужен протокол для создания курочек на сервере, то логично придумать ему расширение для посылки массива курочек
Ну дык вот это мультидерьмо баундри — это оно и есть, расширение для посылки массива курочек.
И изначально я плевался на то, что сделанный в «TCP» «поток байт» — это никому не нужное дерьмо. Оно нужно разве что для педерачи аудиовизуальной информации, и то не нужно, потому что все вменяемые видеосерверы поток бьют на куски нужной длины. В реальности же 99.9% времени по сети гоняются сообщения переменной длины — HTTP-запросы, уебсокет-фреймы, you name it. И чтобы их передавать по ёбанному потоку байт — каждая макака придумывает свой протокол, один охуительнее другого. И именно поэтому я за «UDP» (был бы, если бы не ограничение на размер датаграм).
Только больному, душному, максимально оторванному от реальности деду могла прийти в голову мысль о том, что «поток байт» — это хорошая, годная высокоуровневая абсракция.
guest6 10.02.2022 21:45 # +1
Дед не виноват же, что все запутались во фрагментации, хакеры стали ее юзать для ddosа, и фрагментацию отменили, и теперь сообщения ширше MTU не пролазят.
А HTTP просто не по назначению юзают же
ISO 10.02.2022 21:46 # 0
guest6 10.02.2022 21:51 # 0
У проводного ethernet 1500, но если поверх него запустить VPN (некоторые провайдеры любят L2TP запустить) то он станет меньше..
Так-то размер пакета максимальный вроде 64K (ну минус заголовки там всякие) но MTU, увы
CHayT 11.02.2022 01:14 # +3
Деды просто любили городить уровни, и предполагали, что ты поверх потока байт запилишь т.н. ``framing protocol'', который эти байты разобьёт на логические сообщения неком способом, удобным для твоей бизнес логики. Это упрощает транспортный уровень, т.к. ему не нужно думать про размеры буферов в твоей рукоприкладной питушне. Решение вполне в духе многоуровневой модели.
TCP придумали в 80е, когда скорость арпанетов была в килобитах в секунду, и про оверхед такого решения никто не думал, скорее всего.
CHayT 11.02.2022 01:22 # +2
guest6 11.02.2022 01:26 # +2
Деды так-то дали возможнасць вообще любой протокол поверх IP пулять, просто NAT сильно ограничил выбор протоколов
>разбивать на многочлены.
так-то MSS же, ТЦП это и делает. Толще MTU все равно ничего не пролезет. Знаете, сколько слез было пролито из за MTU blackhole, когда пинги идут, а сайты открываются наполовину?
ObeseYoung 11.02.2022 02:27 # 0
CHayT 11.02.2022 01:17 # +1
Вы призвали летающую голову Fike.
guest6 11.02.2022 01:19 # 0
Что не отменяет того факта, что попытка создать курочку атомарно посредством HTTP это попытка закрутить гвоздь стамеской. Но смузихлёбы придумали, а программисты теперь страдают
CHayT 11.02.2022 01:30 # 0
bormand 11.02.2022 01:21 # 0
S3 и аналоги всё стерпят. У меня почему-то такое ощущение, что всякие вконтакты и фейсбуки навсегда сохраняют загруженную фотку в хранилище даже если её потом передумают постить...
guest6 11.02.2022 01:22 # 0
bormand 11.02.2022 01:23 # 0
Юзер заливает фотки по одной, а затем отдельным атомарным запросом постит их урлы и описание.
guest6 11.02.2022 01:29 # 0
не городить же MVCC в хранилке
bormand 11.02.2022 01:30 # 0
guest6 11.02.2022 01:31 # 0
ObeseYoung 10.02.2022 21:31 # 0
ObeseYoung 10.02.2022 21:24 # 0
bormand 10.02.2022 21:18 # +1
bormand 10.02.2022 21:11 # 0
Причём не как-то, а чтобы юзер не охуел! Всё должно быть более-менее читаемо даже на старых клиентах, которые не умеют эти ваши MIME.
Тащить всё это в HTTP, разумеется, не стоило.
BEKTOPHblu_nETyX 10.02.2022 22:05 # 0
Подключится не успели?
BEKTOPHblu_nETyX 10.02.2022 22:06 # 0
Как ой баг ор )) )