我的程序似乎在Heroku上工作正常,但在重新加载页面3-4次后,它崩溃了,我收到错误H13: Connection closed without response
。
但是,当我在计算机上运行它时,它完全正常并且没有任何错误。
这是我的代码:
#if os(Linux)
import Glibc
#else
import Darwin
#endif
import Vapor
let arrayA: [String] = ["some strings here"]
let arrayB: [String] = ["more strings there"]
let arrayC: [String] = ["and some more here"]
func buildName (from arrayA: [String], and arrayB: [String], and arrayC: [String]) -> String {
#if os(Linux)
let a: Int = Int(random() % (arrayA.count + 1))
let b: Int = Int(random() % (arrayB.count + 1))
let c: Int = Int(random() % (arrayC.count + 1))
#else
let a: Int = Int(arc4random_uniform(UInt32(arrayA.count)))
let b: Int = Int(arc4random_uniform(UInt32(arrayB.count)))
let c: Int = Int(arc4random_uniform(UInt32(arrayC.count)))
#endif
return (arrayA[a] + " " + arrayB[b] + " " + arrayC[c])
}
let defaultHead: String = "<head><meta charset='utf-8'></head>"
//create Droplet object
let drop = Droplet()
// REGISTER Routes and handlers
drop.get { req in
return buildName(from: arrayA, and: arrayB, and: arrayC)
}
// Start the server
drop.run()
我做错了什么?
答案 0 :(得分:0)
let a: Int = Int(random() % (arrayA.count + 1))
此行生成的数字可能等于ArrayA.count。
因此,它可能会产生fatal error: Index out of range
。
所以,我认为这是主要原因。
答案 1 :(得分:0)
arc4random_uniform在linux上不起作用。 请改用:
public static func randomInt(min: Int, max:Int) -> Int {
#if os(Linux)
return Glibc.random() % max
#else
return min + Int(arc4random_uniform(UInt32(max - min + 1)))
#endif
}