Node.JS on FreeBSD 64 bit

เมื่อวานลงเครื่องให้น้องสำหรับลอง Node.js app ก็ดาวโหลดมาคอมไพล์ปกติดี ลองรัน node ปรากฏว่ามันค้างนิ่งๆ ก็คิดว่าปกติไม่ได้ทำอะไรต่อ จนมาวันนี้น้องทักว่ามันอาการไม่ปกติ เลยต้องมาหาวิธีลงใหม่ ขุดไปมาพบว่าเป็นเพราะ v8 ที่ทำให้ Node.js มีปัญหา วันนี้ก็เลยเอามาลองใหม่เริ่มจาก clone v8 มาก่อน

machine:~ user$git clone git://github.com/v8/v8.git

ที่เลือก clone จาก git เพราะจะได้ switch branch สะดวกหลังจากได้ v8 มาก็ compile ออกมาเป็น library ก่อนที่จะ compile ได้ต้องติด scons ด้วยสำหรับ FreeBSD อยู่ใน /usr/ports/devel/scons

machine:~ user$scons arch=x64 snapshot=on

compile เสร็จก็ copy library ไปที่ /usr/local/lib และดาวโหลด node.js และติดตั้ง

machine:~ user$fetch "http://nodejs.org/dist/node-v0.4.7.tar.gz"
...
machine:~ user$tar xvf node-v0.4.7.tar.gz
...
machine:~ user$cd node-v0.4.7
machine:~ user$./configure --shared-v8 --shared-v8-libpath=/home/user/v8 --shared-v8-includes=/home/user/v8/includes
...
machine:~ user$gmake

compile node เสร็จก็ติดตั้ง

machine:~ user$su
machine#gmake install

จากนั้นก็ใช้ Node.js ได้ตามปกติ

About llun

Just a programmer

, ,

  • http://www.facebook.com/people/nithe-butr-khotr/1083505402 นิเทศ บุตรโคตร

    สวัสดีครับ
    ผมมีคำถามเกี่ยวกับ Node.JS ครับ

    ผมลองแกะ source code ของ node.js chat demo, http://chat.nodejs.org/, source code : https://github.com/ry/node_cha….
    ซึ่งมันเป็น public chat room.
    ผมเจอบน server.js line 26, the method appendMessage.

    ============================================================
     this.appendMessage = function (nick, type, text) {
        var m = { nick: nick
                , type: type // “msg”, “join”, “part”
                , text: text
                , timestamp: (new Date()).getTime()
                };

        switch (type) {
          case “msg”:
            sys.puts(” ” + text);
            break;
          case “join”:
            sys.puts(nick + ” join”);
            break;
          case “part”:
            sys.puts(nick + ” part”);
            break;
        }

        messages.push( m );

        while (callbacks.length > 0) {
          callbacks.shift().callback([m]);
        }

        while (messages.length > MESSAGE_BACKLOG)
          messages.shift();
      };

    ============================================================

    It has ” messages.push( m );”.
    step นี้น่าจะเป็น push message to all client.

    ต้องทำยังไงให้เกิดการ push message ไปยัง specific user(browser) อย่าง private chat?
    คือผมต้องการจะให้มัน user ที่เป็นผู้รับข้อความเท่านั้น จึงจะห็นข้อความ  นอกนั้นไม่เห็น  นั่นก็คือ push ข้อมูล ไปยัง specific session เท่านั้นใช่มั้ยครับ
    แล้ว ผมจะต้องจัดการ session ยังไงครับ  พอจะ example ให้ดูเป็นตัวอย่างได้มั้ยครับ
    ขอบคุณครับ

    • Anonymous

      คิดว่าคงต้องแก้ที่ method query มากกว่าครับ เพราะเป็น method ที่คอยถูก query เพื่อเอา message ใหม่ไม่ใช่ append

      Append ทำหน้าที่แค่ได้รับ message มาแล้วใส่ไปใน list messages ทั้งหมด

  • Clz

    วะวะวะว้าว