0

我正在创建一个本地移动项目,它将使用 NodeJS 上的 SocketIO 作为通信 API。

我们想使用 SocketIO 的回调功能,但在原生 iOS(或 Android)上。

但是,回调功能没有出现在我发现的任何 WebSockets 客户端实现中,所以我猜它是 SocketIO 独有的功能?

如果是这样,socketIO 用来使这成为可能的有效负载之前的标头信息是什么。

通过网络,我可以在 JSON 有效负载之前看到一些二进制文件,但我不足以成为 JS 专家来分析客户端的回调功能是如何完成的,因此我可以在 ObjC 和 Java 中复制它。

4

2 回答 2

1

Socket.IO 不仅仅是 WebSockets,还有许多协议和变通方案,它将使用并回退到旧的协议,以尝试建立最可靠和实时的通信层。
它实际上是一堆协议。因此,如果您希望与 Android 或 iOS 进行通信,请考虑使用一种协议,即纯 WebSockets,如下所示:https ://github.com/einaros/ws

然后你需要有适用于 Android 和 iOS 的原生 WebSockets 库。尽管不要期望它们的行为方式与您在 node.js 中习惯的方式相同,因为这些平台完全不同。可能会有消息拉取而不是事件驱动(回调)。

WebSocket 它本身是基于消息的协议,并通过 TCP 将数据作为完整或部分消息发送,并为每条包含有关消息的一些数据(如类型、长度、掩码等)的消息附加帧(标头)。您无需深入了解对 WebSockets 有一定程度的了解,以便使用它们。

Socket.IO 在他们的消息中发送 JSON 数据,只是做自己的工作来确保有一种简洁有用的方式来发出和捕获事件。

请检查几个库,例如:https ://github.com/pkyeck/socket.IO-objc for iOS(socket.io 客户端),或https://github.com/koush/android-websockets

这些库实际上会处理它们的回调,因此您无需了解 WebSockets 或 Socket.IO 在内部是如何工作的。

于 2013-09-11T09:31:55.763 回答
0

我对 Maksims 的编辑尚未被接受,所以我只想为其他人提供一个简洁的答案。

套接字IO

确实有一个封装每条消息的标头,因此它需要使用本机 SocketIO 实现,而不仅仅是 WebSocket 实现。

https://github.com/pkyeck/socket.IO-objc

是一个 iOS 原生库,它确实实现了 SocketIO,它还实现了 SocketIO 可用的极其方便的回调功能。

- (void) sendJSON:(NSDictionary *)data withAcknowledge:(SocketIOCallback)function;

我还没有为 Android 找到相同的实现,如果它在 12 月之前不存在,我可能会自己创建一个。

于 2013-09-14T10:24:39.190 回答