Как определить тип параметра onmessage для websocket? - PullRequest
19 голосов
/ 27 февраля 2012

Здесь https://developer.mozilla.org/en/WebSockets/WebSockets_reference/MessageEvent указывает, что данные атрибута имеют тип DOMString | Blob | ArrayBuffer. Как мне сказать, какой тип я хочу? Или как мне узнать, какой тип я получаю?

Ответы [ 2 ]

38 голосов
/ 27 февраля 2012

Подходящие два типа фреймов, которые может отправлять сервер - это текстовые фреймы и бинарные фреймы ( 5.2 ).ws.binaryType позволяет вам определить, в каком формате вы хотите получить двоичные данные.

  • Двоичные данные: в зависимости от того, установлен ли binaryType либо arraybuffer или blob
  • Текстовые данные: строка

Чтобы определить тип, вы можете использовать:

  • e.data instanceof ArrayBuffer
  • e.data instanceof Blob
  • typeof e.data === "string"

Ссылка :

4.Если type указывает, что данные являются текстовыми, то инициализируйте событие data атрибут data .

If type означает, что данные являются двоичными, а для binaryType установлено значение "blob", затем инициализируйте атрибут data для нового объекта Blob, который представляет данные в качестве необработанных данных.

Если тип указывает, что данные являются двоичными, а для binaryType установлено значение "arraybuffer", то инициализируется событие * data атрибут нового доступного только для чтения ArrayBuffer объекта, содержимое которого data.

0 голосов
/ 23 августа 2018

«Как мне сказать, какой тип мне нужен?»

Тип данных в кадре веб-розетки определяется отправителем (см. 1.2 ) и, следовательно, не может быть установлен получателем. Если отправляются текстовые данные, тип e.data равен string. Если двоичные данные отправляются, то e.data будет экземпляром либо ArrayBuffer, либо Blob, в зависимости от значения свойства ws.binaryType, установленного получателем.

«Или как мне узнать, какой тип я получаю?»

На этот вопрос уже ответил pimvdb.

...