- Team A 寫 Java servlet, 提供一些啥鬼的WebService
- Team B 負責用 apache + PHP 寫 EndUser 網頁
- Team C 負責用 NodeJS 寫開放的API
- Team D 要用 nginx + php5-fpm 來寫後台控管網頁
- Team D 要用 Perl + Mason 寫統計網頁
- 所有的服務都要有專屬網址
- 所有的服務只能用80 port
- domain name: jasoncheng.tw
在 server01 只要寫幾行code, 一切就幫你搞定
123456789101112131415161718192021
varoptions={hostnameOnly:false,router:{// Team A'jasoncheng.com/servlet':'server01:8081',// Team B'jasoncheng.tw':'server01:8082',// Team C'api.jasoncheng.tw':'server02:8083',// Team C'adm.jasoncheng.tw':'server02:8084',// Team D 'adm.jasoncheng.tw/static':'server02:8085'}};require("http-proxy").createServer(options).listen(80);
當然, 或許你會說 Nginx / Apache 本身也可以做到這些需求, 但不可否認, 人要趕流行不是嗎?
那就用 NodeJS 囉! 這麼多人都說 The Next Big Thing is Node 了.
packagecom.example.testresponsecache;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;importandroid.os.AsyncTask;importandroid.os.Bundle;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ImageView;publicclassMainActivityextendsActivity{privatefinalStringTAG=getClass().getSimpleName();ImageViewimg;Buttonmsg;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);img=(ImageView)this.findViewById(R.id.img);msg=(Button)this.findViewById(R.id.msg);msg.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){newInternetTask().execute();}});}@SuppressLint("NewApi")classInternetTaskextendsAsyncTask<String,String,Boolean>{Bitmapbitmap;StringjsonStr;@SuppressLint("NewApi")@OverrideprotectedvoidonPostExecute(Booleanresult){super.onPostExecute(result);img.setImageBitmap(bitmap);msg.setText(jsonStr);}@OverrideprotectedBooleandoInBackground(String...params){// Test download imagetry{URLurl=newURL("http://jasoncheng.tw/1.png");HttpURLConnectionconn=(HttpURLConnection)(url.openConnection());conn.connect();InputStreamis=conn.getInputStream();BitmapFactory.Optionsops=newBitmapFactory.Options();bitmap=BitmapFactory.decodeStream(is,null,ops);is.close();conn.disconnect();}catch(Exceptione){Log.e(TAG,e.getMessage(),e);}// Test download JSON datatry{URLurl=newURL("http://jasoncheng.tw/1.json");HttpURLConnectionconn=(HttpURLConnection)(url.openConnection());conn.connect();BufferedReaderreader=newBufferedReader(newInputStreamReader(conn.getInputStream(),"UTF-8"));jsonStr=reader.readLine();InputStreamis=conn.getInputStream();is.close();conn.disconnect();}catch(Exceptione){Log.e(TAG,e.getMessage(),e);}returntrue;}}}