先給結(jié)論。這種情況是存在的
下面給出演示的例子
有2個(gè)部分:服務(wù)端和客戶端
1.服務(wù)端沽损,使用node.js做一個(gè)簡(jiǎn)單的客戶端灯节,這里使用菜鳥教程的一個(gè)例子來修改,文件名稱:express_demo.js
var http = require('http');
var sleep = require('sleep');
http.createServer(function (request, response) {
// 發(fā)送 HTTP 頭部
// HTTP 狀態(tài)值: 200 : OK
// 內(nèi)容類型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
sleep.sleep(3)
console.log('寫入數(shù)據(jù)完成');
// 發(fā)送響應(yīng)數(shù)據(jù) "Hello World"
response.end('Hello World\n');
}).listen(8888);
// 終端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
2.客戶端绵估,使用iOS平臺(tái)作為客戶端炎疆,代碼如下
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let url = URL(string: "http://127.0.0.1:8888/")!
let request = URLRequest(url: url, timeoutInterval: 1)
let task = URLSession.shared.dataTask(with: request) { (data, resp, error) in
if let e = error {
print(e)
}
}
task.resume()
}
}
解釋一下,服務(wù)端接收到請(qǐng)求之后国裳,sleep了3秒形入,客戶端設(shè)置為1秒超時(shí)
運(yùn)行后發(fā)現(xiàn),客戶端總是報(bào)超時(shí)Error缝左,而服務(wù)端還能在客戶端超時(shí)之后寫入數(shù)據(jù)亿遂,這個(gè)時(shí)候服務(wù)端的數(shù)據(jù)被改寫了,但是客戶端不知道服務(wù)端的數(shù)據(jù)被改寫渺杉,因?yàn)闆]有相應(yīng)到客戶端