我試圖使用API製作簡單的消息應用程序。現在,我有一個線程每秒檢查一次請求,看看消息的數量是否發生了變化,但是這會帶來很多麻煩,RAM會不斷增加,並且由於請求的數量太大,API變得無法響應。目前我的代碼看起來是這樣的:如何讀取HTTP請求,而不會使用Swift 3氾濫我的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,因此我非常感謝關於此事的一些建議,謝謝!
我認爲這是當你應該使用推送通知... – Honey
以什麼方式?我的API爲我提供了2個端點:getmessages和sendmessage –
我同意@Honey,而不是無休止地運行該函數來觀察收到的消息,向後端添加APNS功能,以便在新消息可用時通知您的應用程序,應用程序可以運行一個函數來提取新消息。 – janusbalatbat