WebFaction能不能跑自己的C/C++語言Server?

我之前寫了這篇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

custom_app

如你所見列表裡還有一堆其它程式可以透過這樣自動建成,不過我們今天重點不在那裡,而在自製的server,所以那些部份留在改天再介紹

這個步驟他會在你的home/webapps/下建立一個c_server_demo的資料夾,基本上,WebFaction的所有自動生程的程式都會在webapps下建立相對應的資料夾,而該安裝的檔案也會放在裡面,因為我們建立的是custom app,所以裡面是空的,不果我們還是照慣例,把我們的server程式碼丟進去,而在建立完c_server_demo之後,除了他會自動建立資料夾外,他還會分配一個port給你

custom_port

有了這個port,稍後我們的server就可以開在這個port上面,我們先進行編譯的工作,編譯完成後就可以執行我們的server,把它綁在我們想要的ip以及port上

compile_app

接著,server上線了,就可以來試著連線看看

connect

成功了,就是這麼簡單,啥? 你說為什麼會有怪怪的數字? 因為server本來設計是接受binrary的整數,telnet丟字串給他當然會出問題,以上就是對於WebFaction跑自行編譯Server的示範,因為有60天無條件退款,所以有興趣的朋友們別客氣申請來試試看,可以的話推薦人請填victorlin,或是從部落格的文章連結進入申請,還有其它問題的話可以問我,或是我幫各位問他們的客服

This entry was posted in 中文文章, 分享 and tagged , , , , , , , . Bookmark the permalink.

2 Responses to WebFaction能不能跑自己的C/C++語言Server?

  1. DANNY says:

    請問可以否自行安裝mysql 和 jdk呢 ?

  2. victor says:

    可以,MySQL的話,他們已經有裝好,可以透過面版開帳號和資料庫就可以使用,你要自己裝一定是可以的,只是這樣做,很浪費記憶體,JDK已經很花記憶體了,加上MySQL,你的virual hos的plan的記憶體應該不夠你跑這兩樣,又或著跑了這兩樣就跑不了其它的東西

    你可以看一下他的價目表
    http://blog.ez2learn.com/2009/07/19/webfaction-plans/

    記憶體最多200M (可以加錢增加),而他的記憶體用量,只算long-running的process,也就是那種一直在跑的,如果是PHP之類的不算,JSP我沒用過,就不太瞭解

    所以最好MySQL還是用他們的就好