我正在创建一个本机移动项目,该项目将使用NodeJS上的SocketIO作为通信API。
我们想使用 SocketIO 的回调功能,但在原生 iOS(或 Android)上。
但是,回调功能没有出现在我发现的任何 WebSockets 客户端实现中,所以我猜它是 SocketIO 独有的功能?
如果是这样,socketIO 用于实现此目的的有效负载之前的标头信息是什么。
通过网络,我可以在 JSON 有效负载之前看到一些二进制文件,但我没有足够的 JS 大师来分析客户端的回调功能是如何完成的,以便我可以在 ObjC 和 Java 中复制它。
Socket.IO 不仅仅是WebSockets,而是许多协议和解决方法,它将使用并回退到旧的协议和解决方法,以尝试建立最可靠和实时的通信层。
它实际上是一堆协议。因此,如果您希望与Android或iOS进行通信,请考虑一个单一的协议,那就是像这样的纯WebSockets:https://github.com/einaros/ws
然后,您需要拥有适用于Android和iOS的本机WebSockets库。尽管不要指望它们的行为方式与您在节点中习惯的方式相同.js因为这些平台完全不同。可能存在消息拉取而不是事件驱动的(回调)。
WebSocket 它本身是基于消息的协议,并通过 TCP 将数据作为完整或部分消息发送,并为包含有关消息的一些数据(如类型、长度、屏蔽等)的每个消息提供额外的成帧(标头)。您无需深入了解 WebSocket 即可使用它们。
Socket.IO 在他们的消息中发送JSON数据,只是做自己的工作,以确保有整洁和有用的方法来发出和捕获事件。
请检查一些库,例如:适用于 iOS 的 https://github.com/pkyeck/socket.IO-objc(socket.io 客户端)或 https://github.com/koush/android-websockets
这些库实际上处理它们的回调,因此您无需了解 WebSockets 或 Socket.IO 在内部的工作方式。
我对Maksims的编辑还没有被接受,所以我只是想为其他人提供一个简洁的答案。
套接字IO
确实有一个打包每条消息的标头,因此它需要使用本机 SocketIO 实现,而不仅仅是 WebSocket 实现。
https://github.com/pkyeck/socket.IO-objc
是iOS原生的库,它确实实现了SocketIO,它还实现了SocketIO可用的非常方便的回调功能。
- (void) sendJSON:(NSDictionary *)data withAcknowledge:(SocketIOCallback)function;
我还没有在 Android 上找到相同的实现,如果到 12 月它不存在,可能会自己创建一个。