因为要做一些即时交互的功能,所以需要用到socket。
为了实现pc,安卓,ios,三个平台交互,便使用了socket.io(之前用的websockt,老实说,使用简单方便,但是有时候在消息接收方面会有延迟,最主要是iOS开发较晚,安卓和pc已经集成进去了 😣,我就得配合他们来)
首先使用的socket.io官方的object-c方案,然而使用不了🤷♂️。然后想了下,能否通过加载一个隐藏的webview,访问socket地址的方式来监听消息事件,然后通过这个思路找了一下,找到了这个 SIOSocket 附上地址 github 上demo下载地址
可以看到本质上是通过苹果自带的JavaScriptCore框架获取js对象,然后对前端代码进行调用和事件获取。毕竟WebSocket本质上是html5新增加的一种通信协议,而socket.io是基于webSocket之上封装的。
再来说说,SIOSocket里面方法的使用,比如最直观的链接socket,接收消息和发送消息。
链接方法:
前端代码:
可以看到,socket.on是接收方法,里面的参数的事件名称包含 connect(链接),messageevent(消息事件,由开发人员商定),disconnect(断开连接)
而oc里面便是通过jscontext对象执行evaluateScript方法来掉用前端的方法,前端方法名和参数都作为evaluateScript的一个nsstring参数传入.而执行的前端方法便是上面的 socket.on.
而在接收到即时消息之后会存入一个args数组里面,取出来进行json解析便拿到了传递过来的数据.
下面是发送方法,详细介绍注释里面有:因为发生过发送的数据格式和服务端接收到的不一样的问题,发现是做过对字符同义化处理,便进行了encode编码,再由后台decode一下
通过同样的方式调用前端的emit方法