Q: Socket 很难吗?
A: 不难
Q :Socket 长连接跟Http短连接有什么区别
A: 1.Http是发送一个请求,这个请求就会有一个回调
2.Socket是创建一个连接,发送多个请求,所有的请求结果都在同一个回调方法里面监听,具体这个消息怎么解析就要看业务逻辑了。常用的就是在返回来的消息body(json)里面用messageType来做区分,然后根据messageType将body转发到不同的业务逻辑里面去解析
Q :Http 是在程序的任意的地方发送请求和监听回调,那么Socket应该在哪里创建长连接和监听呢
A: Socket 应该在程序的入口处,比如AppDelegate里面创建连接和监听消息。这样的好处就是,不会因为VC出栈而导致消息端口断开或消亡
Q :Http发送请求都有特定的回调,可以直接处理业务逻辑,而Socket是在不同时间点发送的所有请求都在同一个方法响应并返回数据,那请求回来的数据要回调到发送请求的地方应该怎么办呢?
A: 我的做法是发送消息前,创建一个唯一的requestId ,并携带到要发送的消息体里面,下一步很重要: 调用发送消息前,添加一个通知的监听,通知的名称就是requestId ,而服务器返回来的消息体,也就是在回调接口处,每一个消息体,如果requestId (服务器要将客户端发送过去的requestId 带回来,开发前协商好)不为空,那么说明这个消息是对请求结果的回调,然后发送一个通知,通知名就是requestId 。这样就解决了发送请求唯一,请求回调也唯一。
Q: 请求多久没响应算超时?
A:如果很多业务的请求都走Socket通道,或服务器压力较大,或考虑到弱网络应用场景较多,那么建议一分钟后算超时!反过来,Sokect的使用较为低频,应用环境相对友好,可以设置15秒超时。
有时间的话补上一点iOS 的代码实践供大家参考