是否可以通过socket.io java客户端

时间:2020-04-05 03:05:41

标签: java android arrays socket.io

这实际上是两个问题合而为一,但是它们是紧密相关的

我已经读过很多次了,您必须通过诸如socket.io之类的websocket发送json / string或二进制数据,但是您不能混合使用这些类型。但是后来我在socket.io客户端Java实现的官方documentation中找到了以下示例,对此我感到困惑

// Sending an object
JSONObject obj = new JSONObject();
obj.put("hello", "server");
obj.put("binary", new byte[42]);
socket.emit("foo", obj);

// Receiving an object
socket.on("foo", new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    JSONObject obj = (JSONObject)args[0];
  }
});

顾名思义,其中json的“ binary”元素显然是二进制的。该文档使用org.json讨论了socket.io,但是我找不到该库支持将二进制数据添加到任何地方的json文件中。

现在支持此功能吗?如果是这样,socket.io在后台做什么?是否将发射分为两个单独的消息,然后重新合并?还是只是将二进制数据保存在base64中?

有点背景。

我正在尝试向我的应用添加私人聊天功能,以便用户可以与其他几个用户进行多个基于私人两方音频消息的聊天对话。我在寻找如何告诉我的服务器如何转发所有消息时遇到问题。如果我使用json,我可以简单地向json添加发送者和接收者,并让服务器读取接收者的ID并相应地转发消息。但是我不确定如何处理仅包含二进制数据的消息。我不知道如何向它们添加元数据(例如,发送方和接收方ID),以便服务器知道将其寻址给谁。我听说过以下建议:发送一个带有发送方ID,接收方ID和我要发送的文件的MD5哈希的json,然后单独发送二进制数据,并让服务器通过md5签名匹配两个消息,但这似乎有其自身的问题。就像我不知道如何在服务器上计算大量音频文件的MD5会影响服务器性能,还有一个问题,就是在指定目标的json到达之前,可能会接收音频字节数组。

总有一种选择,就像我到目前为止所做的那样,将我的音频文件编码为base64并以json的形式发送,但是我被告知这是一种不好的做法,应该避免这样做,就像夸大了包裹的大小一样。< / p>

我觉得那里已经有很多消息传递应用程序了,我敢打赌至少有一些基于websockets。我想知道是否有关于如何通过网络套接字将二进制数据路由到特定接收连接的最佳实践。

对于以上问题的任何回答,以及任何有关如何解决背景技术部分中提到的问题的提示,都将予以表决。

0 个答案:

没有答案