如何在不使用Swift 3充斥我的API的情况下读取HTTP请求

时间:2017-04-18 18:33:39

标签: ios swift multithreading asynchronous swift3

我正在尝试使用API​​创建一个简单的消息传递应用。现在,我有一个线程,每秒检查一个请求,看看消息的数量是否已经改变,但这会导致很多麻烦,RAM不断上升,由于请求数量很大,API变得无法响应。目前我的代码看起来像这样:

var request = URLRequest(url: URL(string: "URL")!)
let session = URLSession.shared

public func thread()
        {
            DispatchQueue.global(qos: .background).async {
                while(true)
                {
                    self.request.httpMethod = "GET"
                    self.session.dataTask(with: self.request) {data, response, err in
                        let json = try! JSONSerialization.jsonObject(with: data!, options: []) as? [String: Any]
                        let data = json?["data"] as? [[String: Any]]
                        if((data?.count)! > self.nbMessages)
                        {
                            self.messages.removeAll()
                            for message in data! {
                                let text = message["message_body"] as? String
                                let creator = message["creator_id"] as? Int
                                self.messages.append([text!, String(creator!)])
                            }
                            DispatchQueue.main.async {
                                self.nbMessages = (data?.count)!
                                self.TableView.reloadData()
                                let scrollPoint = CGPoint(x: 0, y: self.TableView.contentSize.height - self.TableView.frame.size.height)
                                self.TableView.setContentOffset(scrollPoint, animated: false)
                            }
                        }
                        }.resume()
                    usleep(2000)
                }
            }
        }

这样可以正常工作,我可以发送消息并查看发送给我的消息(有一个不错的延迟),但我的逻辑与每2秒的请求是关闭的,我承认它。我还在学习Swift,所以我非常感谢你对此事的一些建议,谢谢!

1 个答案:

答案 0 :(得分:0)

在评论中,您提供详细说明,表示您正在实施信使。为此目的,简单的HTTP请求不是合适的方法。相反,您想要引入所谓的套接字连接。我敢于引用another relevant thread

  

它被称为套接字连接,一眼就看起来像一个频道,在服务器端托管,任何客户端(设备)都可以加入这个频道(两个或更多,无论你想要什么)。如果设备向服务器发送消息,它应该向所有其他参与者广播消息(它甚至可以向发送者本身广播消息,但是有一些元信息,所以我们可以解除我们自己的消息并忽略它们。)

     

因此,首先您需要建立套接字连接的服务器,然后您可以实现任何已有的解决方案(例如,适用于iOS的https://github.com/daltoniam/Starscream)。此外,您可能需要查看AWS https://aws.amazon.com,因为它具有开箱即用的服务器端套接字连接服务以及Android和iOS平台所需的SDK。