iOS开发时监控服务器状态

1. 起因

公司开发的App分客户端和服务器端。在开发阶段,后台的接口服务都是运行在测试服务器上的,服务端工程师在发布接口的时候,后台的接口无法访问。
客户端工程师可能正在调试程序,这时候要停下来,等着服务端重启完毕。什么时候重启完了呢,只能问一下服务端工程师,或者自己刷新一下应用,这个时间相对比较长。
所以产生了一个需求,比较实时的监控服务端的状态。这个需求的实现,肯定有很多方式。这里是作为一个客户端工程师快速的给出的解决方式。

2. 解决方式

  • 用一个定时器,周期性的请求某个URL,根据响应来判断服务器状态,200认为是正常,其它认为错误。
  • 在一个窗口中展示状态。每当状态发生了变化,在Mac的通知中心中发一条通知。
  • 效果:
状态窗口

iOS开发时监控服务器状态_第1张图片
通知中心

3. 代码

代码在github地址

//
// ViewController.swift
// ServerWatch
//
// Created by qi on 16/1/7.
// Copyright © 2016年 im.windgo. All rights reserved.
//
import Cocoa
enum WWServerStatus:Int {
case Unkown
case Ok
case Error
}
class ViewController: NSViewController {
@IBOutlet weak var stateLabel: NSTextField!
var serverStatus = WWServerStatus.Unkown
var timer:NSTimer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
showStatus()
timer=NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "requestStatus:", userInfo: nil, repeats: true)
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
func showStatus(){
let statusMessage = [WWServerStatus.Unkown:"服务器状态:未知",
WWServerStatus.Ok:"服务器状态:正常",
WWServerStatus.Error:"服务器状态:错误",
]
let statusColor = [WWServerStatus.Unkown:NSColor.blackColor(),
WWServerStatus.Ok:NSColor.greenColor(),
WWServerStatus.Error:NSColor.redColor()
]
stateLabel.textColor=statusColor[self.serverStatus]
stateLabel.stringValue = statusMessage[self.serverStatus]!
}
func requestStatus(sender:AnyObject!){
let session=NSURLSession(configuration: NSURLSessionConfiguration.ephemeralSessionConfiguration())
// 设置自己的测试用链接
let request=NSURLRequest(URL: NSURL(string:"http://apitest.hahaha.com/homepage")!)
let task=session.downloadTaskWithRequest(request) { (url:NSURL?, response:NSURLResponse?, error:NSError?) -> Void in
if error != nil || (response as! NSHTTPURLResponse).statusCode != 200 {
if self.serverStatus != WWServerStatus.Error {
let notice=NSUserNotification()
notice.title="错误:apitest"
NSUserNotificationCenter.defaultUserNotificationCenter().deliverNotification(notice)
}
self.serverStatus=WWServerStatus.Error
}
else{
if self.serverStatus != WWServerStatus.Ok {
let notice=NSUserNotification()
notice.title="正常:apitest"
NSUserNotificationCenter.defaultUserNotificationCenter().deliverNotification(notice)
}
self.serverStatus=WWServerStatus.Ok
}
self.showStatus()
}
task.resume()
}
}

你可能感兴趣的:(iOS开发时监控服务器状态)