отправка json и аудиофайла в указанный c socketId из моего приложения через веб-сокет Socket.io - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь настроить функцию чата для своего приложения, и мне интересно, как лучше это сделать.

Вот что я представляю себе на данный момент:

пользователь решает и выбирает, с кем он хочет общаться, затем записывает звуковое сообщение, которое сохраняется в виде файла, и отправляет его в веб-сокет.

Поскольку реализация android Socket.IO не включает метод .to(socketId), мне нужно передать идентификатор предполагаемого получателя сообщения (вместе с некоторыми другими данными, относящимися к сообщению) внутри JSON, чтобы затем можно было прочитать сервер, чтобы отправить сообщение, используя соответствующий вызов .to(socketId). Поскольку я хочу отправить как текст, так и аудио, я конвертирую свой аудиофайл в byte[] byteArrayOfAudio, а затем использую new String(byteArrayOfAudio) для преобразования его в строку. Затем я добавляю эту строчку к JSON и к фактическому тексту, который я отправляю в websocket.

сервер читает сообщение и находит идентификатор соединения (socketId), соответствующий идентификатору пользователя получателя. и затем пересылает сообщение соответствующему получателю. приемник декодирует json, получает аудио строку, преобразует ее в байт [], затем преобразует ее обратно в соответствующий аудиоформат, и затем приемник может ее воспроизвести.

Мои вопросы:

  • это лучшая практика?

  • есть ли какой-либо способ сообщить серверу напрямую из android, в какой сокетI будет отправлен месседж? Существуют ли какие-либо потенциально дорогостоящие издержки обработки для сервера из-за необходимости постоянно читать, скажем, 50 000 символов JSON объектов только для получения идентификатора получателя?

  • Я знаю, что приведение в порядок файла увеличивает его размер, есть ли лучший способ сделать это?

аудиофайлы довольно малы (до 50 КБ), и, если выигрыш не значителен, я бы предпочел, чтобы аудиофайл и связанные с ним текстовые данные отправлялись в одном .emit()

любая полезная информация будет принята с благодарностью

1 Ответ

1 голос
/ 29 марта 2020

Я предлагаю вам избегать отправки аудио с использованием json ... при использовании веб-сокетов полностью зависит от вас, чтобы определить протокол между клиентом и сервером ... каждое сообщение веб-сокета должно быть либо текстовым сообщением, либо двоичным сообщением. . отправлять аудио, используя двоичный тип сообщения, не заключенный в json

, когда вы отправляете каждый аудио буфер, отправляйте его отдельно без других атрибутов ... после того, как он был отправлен на принимающей стороне, проверьте входящее сообщение веб-сокета на тип и обрабатывать двоичное сообщение отдельно от текстового сообщения traffi c

Чтобы однозначно идентифицировать отправителя этого двоичного traffi c, вы можете пометить метаданные внутри этого буфера некоторым идентификатором отправителя ... альтернативно отправителю на стороне вы можете создать ха sh двоичного аудиобуфера, который будет выступать в качестве уникального идентификатора этого буфера, а затем отправить сообщение json с этим ха sh и тегом идентификатора отправителя, чтобы сторона получателя знала его приход и могла уникальным образом сопоставить следующее двоичное сообщение с отправителем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...