我之前寫了這篇WebFaction不止是虛擬主機的介紹,介紹關於WebFaction雖然是虛擬主機,但是他能做得比虛擬主機多太多了,價格實惠,功能強大,有人問WebFaction能不能跑自己的C/C++語言寫的Server,答案是當然可以,這點有明確地列在他們開出來的規格裡,為了示範如何做以及證明的確可以,我把我之前修網路程式設計寫的無聊Server丟上去編譯並執行給大家看
首先是伺服器的部份,因為只是作業,我寫的是一個很無聊的伺服器,client會丟一個數字n過來,而server會計算出這個數字在費伯那契數列中的第n個數然後回傳,只是為了示範,所以只以簡單為主,以下為程式碼片段:
> n;
cout << "Receved request : " << n << endl;
size_t i;
int a = 1;
int b = 1;
for(i = 0; i < n; ++i) {
int temp = a + b;
a = b;
b = temp;
}
{
stringstream stream;
stream << b;
writeString(s, stream.str() + "n");
}
}
int main(int argc, char *argv[]) {
try {
if(argc != 3) {
cout << "usage: fib interface port" << endl;
return 0;
}
const string interface = argv[1];
// get port
int port;
stringstream str;
str << argv[2];
str >> port;
// listen
int s = listenTCP(port, 5, interface);
cout << "Listing on " << interface << ":" << port << " ..." << endl;
for(;;) {
// accept
sockaddr_in addr;
size_t len = sizeof(addr);
int client = accept(s, reinterpret_cast(&addr), &len);
if(client == -1) {
THROW();
}
cout << "A connection from " << ipAsString(addr.sin_addr.s_addr) << endl;
handleRequest(client);
cout << "Close connection" << endl;
close(client);
}
} catch(SocketError &e) {
e.print();
}
return 0;
}
]]>
有了程式碼之後,我們要如何把它丟到WebFaction上面跑呢? 這部份比較討人厭,我個人不是很喜歡在unix-like的環境下開發C/C++程式,因為實在太麻煩了,各家OS的header都不盡相同,文件也七零八落,不知道去哪裡找,不像M$雖然邪惡,可是他的MSDN就在那裡,也只有一份,比起來要跨平台Python方便多了,寫一次到處跑,還好這作業原本就是在unix-like下跑的,所以只差了errno的link問題,解決後就可以編譯了
首先,我們需要從WebFaction的control panel中開一個custom app,也就是自訂的Server,因為port如果都任憑大家亂開,撞port號碼是個很大的問題,因此WebFaction的port是交給他們統一分配的,如下圖所示,操作面版就可以建立一個custom app
如你所見列表裡還有一堆其它程式可以透過這樣自動建成,不過我們今天重點不在那裡,而在自製的server,所以那些部份留在改天再介紹
這個步驟他會在你的home/webapps/下建立一個c_server_demo的資料夾,基本上,WebFaction的所有自動生程的程式都會在webapps下建立相對應的資料夾,而該安裝的檔案也會放在裡面,因為我們建立的是custom app,所以裡面是空的,不果我們還是照慣例,把我們的server程式碼丟進去,而在建立完c_server_demo之後,除了他會自動建立資料夾外,他還會分配一個port給你
有了這個port,稍後我們的server就可以開在這個port上面,我們先進行編譯的工作,編譯完成後就可以執行我們的server,把它綁在我們想要的ip以及port上
接著,server上線了,就可以來試著連線看看
成功了,就是這麼簡單,啥? 你說為什麼會有怪怪的數字? 因為server本來設計是接受binrary的整數,telnet丟字串給他當然會出問題,以上就是對於WebFaction跑自行編譯Server的示範,因為有60天無條件退款,所以有興趣的朋友們別客氣申請來試試看,可以的話推薦人請填victorlin,或是從部落格的文章連結進入申請,還有其它問題的話可以問我,或是我幫各位問他們的客服
請問可以否自行安裝mysql 和 jdk呢 ?
可以,MySQL的話,他們已經有裝好,可以透過面版開帳號和資料庫就可以使用,你要自己裝一定是可以的,只是這樣做,很浪費記憶體,JDK已經很花記憶體了,加上MySQL,你的virual hos的plan的記憶體應該不夠你跑這兩樣,又或著跑了這兩樣就跑不了其它的東西
你可以看一下他的價目表
/2009/07/19/webfaction-plans/
記憶體最多200M (可以加錢增加),而他的記憶體用量,只算long-running的process,也就是那種一直在跑的,如果是PHP之類的不算,JSP我沒用過,就不太瞭解
所以最好MySQL還是用他們的就好