ไม่มีใครแก่เกินเรียน ผมพึ่งเริ่มศึกษา node.js ว่ามันคืออะไร

ไม่มีใครแก่เกินเรียน ผมพึ่งเริ่มศึกษา node.js ว่ามันคืออะไร

node.js จริงๆผมได้ยินชื่อมานานมากแล้ว แต่ว่า งานที่ผมเขียนมาโดยตลอดนั้น ก็คือเว็บเท่านั้นเอง ยังห่างไกลจากความจำเป็นที่จะต้องใช้งาน node.js อยู่มาก ผมเลยไม่สนใจมันเลย เพราะผมเองก็ขี้ลืมซะด้วย ศึกษาไว้ไม่ได้ใช้ ลืมแน่นอนดังนั้น ก็เลยปล่อยเวลาผ่านล่วงเลยไป จนมีงานที่จะต้องใช้แล้ว แล้วก็รู้สึกว่าเราคงปล่อยผ่านไปเหมือนอย่างที่เคยผ่านๆมาไม่ได้อีกแล้ว

ถ้าถามผมว่า เมื่อไรต้องใช้ node.js ผมเองก็เคยถามคำถามนี้กับคนอื่นเหมือนกัน ว่าเมื่อไร ถึงจะต้องใช้ node.js ในเมื่อทุกอย่างที่เขียนตอนนี้ มันก็ทำงานได้ด้วย php , mysql , html , javascript หมดแล้ว

คำตอบที่ผมได้รับ ต้องทำให้ผม งงต่อ เพราะยังไม่เข้าใจ และนึกภาพไม่ค่อยออก นั่นคือ "เราจะเริ่มใช้ node.js เมื่อเราต้องการทำ real time application" คำตอบนี้แหล่ะ งง ต่อ แล้วอะไรมันคือ real time application ผมถามต่อ ก็ได้รับคำตอบว่า นึกตัวอย่างง่ายๆ ว่า เวลาทำห้อง chat room นั่นแหล่ะ มันก็คือ real time application ที่เราจะเห็นคนที่เค้าพิมพ์มาทันที โดยที่ไม่ต้องเกิดการ refresh ผมได้ฟังดังนั้น ผมค้านอยู่ในใจ แล้วก็คิดต่อไปว่าไม่เห็นจำเป็นเลย ในเมื่อ php + html + ajax(ตั้ง interval ไว้) ก็ทำงานได้ อาศัย ajax เป็นตัวกวาดข้อความเอามาแสดงไง ไม่ต้อง refresh page เลยแม้แต่น้อย..... แล้วนั่นก็จบบทสนทนา และทิ้งข้อสงสัยที่ยังไม่กระจ่างให้กับผมมาเป็นเวลานานหลายปี เพราะว่าทุกครั้ง ที่ถามว่า เมื่อไรถึงจะใช้ ก็ะได้คำตอบแนวนี้ทั้งหมด แต่ก็ยังไม่เป๊ะสักที

จะมีที่ใกล้เคียงที่สุดแล้วก็คือ มีการยกตัวอย่าง chat box ของ facebook.com นั่นล่ะ node.js สามารถทำแบบนั้นได้ คือข้อความอีกฝ่ายส่งมาเลย โดยไม่มีการตั้ง interval ให้ ajax ไปคอยกวาดข้อความ ก็ทำให้ผมพอ get idea ได้บ้าง แต่บอกตามตรง มันยังไม่เป๊ะ

ล่าสุด เมื่อวานนี้เลย ได้โจทย์มาที่เป๊ะ และตอบโจทย์ว่า เมื่อไรต้องใช้งาน node.js นั่นก็คือ งานที่มีลักษณะทำ transaction แบบ real time มากๆ เช่นการซื้อหุ้น ขายหุ้น ที่ราคาเปลี่ยนแปลงตลอดเวลา จริงๆการส่งคำสั่งซื้อขาย ไม่ได้เป็นงานที่ real time อะไรหรอก แต่ว่าราคาที่ update ที่หน้าจอ นั่นต่างหาก ที่ต้องทำงานแบบ real time (คิดแบบแย่สุดก็ วินาทีละครั้ง)ลำพังจะใช้ ajax call ไป มันก็พอได้อยู่ แต่ลองคิดว่า คน 1000 คนมา call ajax พร้อมกัน อะไรจะเกิดขึ้น? แล้วถ้า คนหนึ่ง ไม่ได้ request แค่ request เดียวล่ะ? อู้ว แม่เจ้า งานงอกแน่นอน ใครที่ทำเว็บมานาน น่าจะพอสังเกตุเห็นได้ว่า HTTP หรือ Hypertext Transfer Protocol เนี่ย มันทำงานค่อนข้างใช้เวลามากพอสมควร รวมทั้ง overhead อีกจำนวนมากมายในแต่ละ request และ server ก็รับ request ได้อย่างมีจำนวนจำกัดอีกด้วย ดังนั้น ถ้ายังทำเว็บแบบเดิมๆ บอกได้คำเดียว ไม่ล่ม ก็บึ้ม แน่นอน

ดังนั้น ผมว่าสำหรับตัวผมเอง มันคงถึงเวลาแล้วล่ะ ที่ต้องศึกษามันอย่างจริงจัง และทดสอบใช้มันอย่างจริงๆ แน่นอน สิ่งที่จะพบแน่ๆก็คือ ปัญหา ปัญหา และปัญหา เพราะว่า node.js เองนั้น เกิดมาได้ไม่นาน เรียกว่าน้องใหม่ในโลกเราก็ไม่ปาน อย่างวันที่ผมเขียนเนื้อหานี้ พึ่งจะ version 0.10.0 เอง ยังไม่ 1.0 เลย แม้ว่าคนใช้ก็เยอะระดับหนึ่ง แต่มันเทียบไม่ได้กับคนที่ใช้ PHP อย่างแน่นอน ดังนั้น ออกแรงเยอะแน่นอน แต่ผมมันพวกถึกอยู่แล้ว(แม้ว่าหลังๆออกแนวขี้เกียจขึ้นมาก็ตาม)

วันนี้ สิ่งที่ผมจะทำ ก็คือการติดตั้ง และทดสอบ node.js ให้ได้เห็นอะไรออกมาที่หน้าจอสักอย่างก็ยังดีนั่นแหล่ะ แล้วเนื้อหาตอนถัดๆไป ก็ค่อยเอามาแคะ แกะ เกา ศึกษา ธรรมชาติของมันไปเรื่อยๆ (ผมเป็นคนประเภทชอบศึกษาจากพื้นฐาน แล้วต่อยอด ดังนั้น จะไปช้ากว่าคนอื่น แต่ก็มั่นใจว่า ไม่ง่อนแง่น 5555)

ต่อจากย่อหน้านี้ จะเป็นเรื่อง Technical แล้วนะครับ ซึ่งเกี่ยวข้องหลายส่วนมากๆ ทั้ง OS (linux), network, programming อาจจะต้องมีประสบการณ์สักนิดนึง ถึงจะเข้าใจเรื่องที่ผมเขียนได้ (ผมเป็นมนุษย์ต่างดาวครับ เอิ้กๆ)

เริ่มติดตั้ง node.js

วิธีของผมออกจะบ้าพลัง นั่นก็คือผมจะจำลอง pc ขึ้นมาเพื่อติดตั้ง linux server นะครับ แล้วเอา node ไปลงบนนั้น เพราะว่าผมต้องการทดสอบบน environment ที่คล้าย server จริงมากที่สุด เวลาเจอปัญหาก็จะได้แก้ไขได้ตรงจุดนั้นเอง และได้เรียนรู้ bottom to top ด้วยในตัว

เริ่มต้นด้วยการ download

ผมจะใช้ VirtualBox ในการสร้าง virtual PC และใช้ CentOS version 6 เป็น OS ของ server (host os ผมใช้ windows 7 64bit)

ซึ่งขั้นตอนจากการติดตั้ง CentOS นั้น มีอะไรต้อง config มากพอสมควรเลย ผมขอข้ามไปก่อนนะครับ เพราะว่าถ้าเอามาเขียนเนี่ย เรียกได้ว่า ได้อีกหน้าหนึ่งยาวๆเลยล่ะครับ (แก้ไขเพื่อปรับค่าพื้นฐานหลายๆอย่าง รวมทั้งติดตั้ง library หลายๆตัวของ linux) ซึ่งตอนนี้ ก็จะถือว่ามี environment ที่พร้อมแล้วนะครับ

ติดตั้ง node.js

พิมพ์ command ตามนี้โลด

su -
yum install openssl-devel
cd /usr/local/src
wget http://nodejs.org/dist/node-latest.tar.gz
tar zxvf node-latest.tar.gz
cd node-v0.10.0 #please change to your version of you download
./configure
make
make install

ถ้าไม่ติด error อะไร ก็พร้อมจะใช้งานแล้ว สำหรับคำสั่ง cd ให้ดูดีๆนะครับ ว่าคุณกำลังใช้ version อะไรอยู่ เพราะชื่อแฟ้มจะเปลี่ยนไปจากนี้ครับ

สำหรับการทดสอบ วิธีที่ยอดนิยมสุด คือสร้างงานขึ้นมา 1 ตัว แล้วสั่งให้รัน แล้วเปิด browser เพื่อดูผล

ให้สร้างไฟล์ nodejs.js ขึ้นมา ใส้โค้ดดังนี้ครับ

var http = require('http');
http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type':'text/plain'});
    res.end('yes you can\n');
}).listen(8000);
console.log("server running port 8000");
แล้วสั่ง node nodejs.js แล้วใช้ browser เปิด http://ip:8000 โดย ip ก็ใส่เป็น ip VM คุณกำลังใช้งานอยู่ครับ จะเห็นข้อความ yes you can แสดงที่หน้าจอ ถือว่าใช้งานได้แล้วครับ node ทำงานในระบบนี้แล้ว หลังจากนี้ล่ะครับ คือของจริง ต้องเขียนระบบจริงๆแล้วครับ โดยส่วนตัวผมเอง จะเริ่มจากการสร้าง chat room ขึ้นมาก่อน ประโยชน์ก็เพื่อต้องการศึกษา environment ทั้งหมดที่เกี่ยวข้อง และต้องใช้งาน ซึ่งนี่เป็นเรื่องพื้นฐานที่สำคัญมากส่วนหนึ่งเลย  แล้วคอยติดตามกันต่อไปนะครับ
Create: Modify : 2013-03-21 10:38:06 Read : 12036 URL :