android - 通过 Socket.io websocket 从我的应用程序向特定的 socketId 发送 json 和音频文件

标签 android json performance audio socket.io

我正在尝试为我的应用程序设置聊天功能,我想知道最好的方法。

到目前为止,这是我的设想:

用户决定并选择他想与谁通信,然后他记录一个音频消息,该消息保存为一个文件并将其发送到 websocket。

由于 Socket.IO 的 android 实现不包括 .to(socketId)方法 我需要在 JSON 中传递消息的预期接收者的 ID(以及一些其他消息相关数据),然后可以读取服务器以便使用适当的 .to(socketId) 发出消息称呼。由于我想发送文本和音频,我将音频文件转换为 byte[] byteArrayOfAudio然后使用 new String(byteArrayOfAudio)将其转换为字符串。然后我将这个字符串添加到 JSON 中,并将实际文本发送到 websocket。

服务器读取消息并找到与接收者的用户 ID 匹配的连接 ID(socketId)。然后将消息转发给适当的接收者。接收器解码 json 获取音频字符串,将其转换为 byte[],然后将其转换回适当的音频格式,然后接收器可以播放它。

我的问题是:

  • 这是最佳做法吗?
  • 有什么方法可以直接从android告诉服务器消息要转发到哪个socketId?服务器是否有任何潜在的昂贵的处理开销,因为必须不断地读取 50 000 个字符的 JSON 对象来获取接收者 ID?
  • 我知道对文件进行字符串化会增加其大小,有没有更好的方法呢?

  • 音频文件相当小(最大 50kb),如果 yield 不显着,我希望音频文件和相关文本数据在一个 .emit() 中发送

    任何有用的信息将不胜感激

    最佳答案

    我建议您避免使用 json 发送音频...当使用 websockets 时,完全由您来定义客户端和服务器之间的协议(protocol)...每个 websocket 消息必须是文本消息或二进制消息...使用发送音频未包装在 json 中的二进制消息类型

    当您发送每个音频缓冲区时单独发送它,没有其他属性...一旦在接收端以这种方式发送,测试传入的 websocket 消息的类型并将二进制消息与文本消息流量分开处理

    要唯一标识此二进制流量的发送者,您可以使用一些发送者 id 标记此缓冲区内的元数据...或者在发送者端,您可以创建二进制音频缓冲区的哈希以充当该缓冲区的唯一标识符,然后发送一个带有此哈希和发送者 id 标签的 json 消息,因此接收方知道它的到来,并且可以唯一地将下一条二进制消息与发送者匹配

    关于android - 通过 Socket.io websocket 从我的应用程序向特定的 socketId 发送 json 和音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907601/

    相关文章:

    java - 将带空格的字符串转换为json

    sql - 行设计如何影响 MySQL 性能?

    python - 如何将嵌套字典转换为 pandas DataFrame?

    c++ - 使用 C++1 1's ' auto' 可以提高性能吗?

    python - "Reduce"系列功能

    Android Retrofit 编码 URL

    android - 检查来自android中服务器的响应

    java - 优化sqlite应用程序启动

    java - 统计特定时间段内的数字,Java,Android

    c++ - 如何从 Qt 中的 JSON 数据中检索整数值