【iOS開原始碼】(1):CCLHTTPServer,ioscclhttpserver
我從沒有見過比 CCLHTTPServer 更簡單的 iOS HTTP 伺服器了。你甚至不用建立任何子類即可使用它。對於大部分任務,這個小巧但強悍的伺服器能夠滿足你的需要。
它簡單到令人髮指,因此我認為光看它的首頁介紹就已經足夠了:
https://github.com/cocodelabs/CCLHTTPServer
CCLHTTPServer 是一個 iOS/OSX 下的簡單HTTP 伺服器架構。
一、用法
以下代碼建立了一個簡單的 HTTP 伺服器,監聽指定連接埠,並用指定的 CCLHTTPServerResponse類(子類)進行響應。
Objective-C:
CCLHTTPServer*server = [[CCLHTTPServer alloc] initWithInterface:nil port:8080handler:^id<CCLHTTPServerResponse>(id<CCLHTTPServerRequest>request) {
NSDictionary *headers = @{
@"Content-Type":@"text/plain; charset=utf8",
};
NSData *body = [@"Hello World"dataUsingEncoding:NSUTF8StringEncoding];
return [[CCLHTTPServerResponse alloc]initWithStatusCode:200 headers:headers body:body];
}];
Switf:
varserver:CCLHTTPServer=CCLHTTPServer(interface: nil, port: 7433, handler:
{request in
let headers =["Content-Type": "text/plain; charset=utf8"]
let body = "Hello World".dataUsingEncoding(NSUTF8StringEncoding);
returnCCLHTTPServerResponse(statusCode: 200, headers: headers, body: body)
})
CCLHTTPServerResponse 必須對傳遞給它的request 參數進行處理。request 參數是一個實現了CCLHTTPServerRequest 協議的對象,該協議封裝了各種有用的方法,你可以利用這些方法建立一個各種 response(該協議下面會詳細介紹)。
CCLHTTPServer 的目的是暴露一個用於建立HTTP 伺服器的標準 O-C 介面,見CLLHTTPServer/Interface 目錄。也就是說,別的 HTTP 伺服器也能使用這些介面,開發人員不用管某個伺服器的具體實現即可使用該介面編寫自己的架構。
二、請求 Request
request 是一個實現了 CCLHTTPServerRequest 協議的對象,該協議暴露了 HTTP 要求的基本詳細例如要求方法、路徑、HTTP 版本,headers 以及本文。
@protocol CCLHTTPServerRequest<NSObject>
- (NSString *)method;
- (NSString *)path;
- (NSString *)HTTPVersion;
- (NSDictionary *)headers;
- (NSData *)body;
@end
三、響應 Responses
你可以建立一個 response 類,也可以使用的任何已經實現了 CCLHTTPServerResponse協議的已有類。當然,絕大多數情況下,使用 CCLHTTPServerResponse 足矣。
1、返回 NSData 資料
[CCLHTTPServerResponseresponseWithStatusCode:204 headers:nil body:nil];
2、返迴文本資料
[CCLHTTPServerResponseresponseWithStatusCode:200
headers:nil
content:@"Hello World"
contentType:@"plain/text"];
3、返回 URL 編碼的名值對
這種形式如同: name=Kyle&sex=female
[CCLHTTPServerResponseformURLEncodedResponseWithStatusCode:200
headers:nil
parameters:@{@"name": @"Kyle"}];
4、返回 JSON 資料
[CCLHTTPServerResponseJSONResponseWithStatusCode:200
headers:nil
parameters:@{@"name": @"Kyle"}];
四、安裝
pod 'CCLHTTPServer'
andriod與ios,一個是開原始碼一個是閉原始碼,那除了蘋果軟體要經過商店發行andriod
ios軟體穩定性高,相對安全。安卓使用者多
ios macosx 與unix是什關係?unix不開放原始碼,為何說蘋果承諾開源?
macOSX是複合核心,有三個部分融合而成,這個複合的核心名為XNT,是開源項目。XNT=X is Not Unix,意思為“OSX不是UNIX”,而實際上OSX也並不是簡單的FreeBSD拿過來套上GUI,而是把核心整個改造了。仍屬於 類UNIX系統,注意不是unix,而是類unix。
XNT是開源的。加上一些驅動和系統程式的XNT被稱為Darwin,它曾經是開源項目,在OSX轉向x86架構後停止對x86部分的開源,但仍然對PowerPC部分開源。(這主要是因為喬布斯本人的性格原因,另外蘋果當時確實已經不需要開源社區來找bug了)
linux也是一種類unix,儘管它的實現原理和unix完全不同,但是它繼承了unix精神。
deb是debian系統的一種安裝包格式,debian是一種分支眾多的linux系統。主要分支基於Linux宏核心和GUN,典型的就是常見的ubuntu。非debian,例如fedora,就安裝不了deb,linux通用的安裝軟體方式只有編譯代碼,deb包對不同的linux是不通用的。所以安卓只是一個linux核心上開java虛擬機器,不能安裝deb包。
IOS作業作業系統部分源於darwin,darwin是基於XNT核心的類UNIX系統,因此linux debian的deb是不能安裝在IOS上的。但是IOS上存在debian的apt系統,也就是說可以安裝對IOS封包的deb包,更可以利用Cydia這種帶UI的APT來安裝deb。
儘管喬布斯本人是對開源持不感冒態度,而且曾和另一個和他性格相近的大神Mr. Linus吵起來,
但是蘋果是世界最大的以開源為關鍵戰略的公司之一,這點不可否認。它家的開源項目還有webkit瀏覽器核心,現用於chrome、safari、各種第三方瀏覽器以及幾乎所有的ARM裝置。蘋果還有幾個在更專業的領域裡非常重要的開源項目,比如編譯器架構LLVM,異構編程架構OpenCL,服務發現協議實現Bonjour等,這些在各領域都是大名鼎鼎了,LLVM已經成為了創新的溫床之一,一大堆項目依賴於蘋果的開源項目。