เป้าหมายของเจ้า rabbiter ก็คือ
using XMPP to build a decentralized microblogging platform (think Twitter busted apart to run as a distributed network of microblogging providers)
หลักการทำงาน
เจ้า rabbitter จริงๆแล้วก็คือ module extension ของ ejabberd โดยมันจะประพฤติตนเป็น bot คอยโต้ตอบกับเรา
หน้าที่ของมันก็คือการ relay message ของคนอื่นๆที่เราสนใจ (follow) มาให้เรา หรือ ส่งต่อข้อความของเรา ไปให้กับคนอื่นที่สนใจติดตามเรา (follower)
โดยการ relay นี้สามารถทำข้ามวง ejabberd server ได้
ในแง่ architecture ประเด็นที่น่าสนใจก็คือ มันใช้ messageing queue (rabbitmq) เข้ามา handle publisher-subscriber model.
อ่านเอกสารอธิบายอย่างละเอียดได้ที่นี่
https://dev.rabbitmq.com/wiki/RabbiterFederation
วิธีการ install
- ติดตั้ง erlang, เนื่องจาก erlang compile ได้ง่ายๆ ดังนั้นใช้วิธี download source code มา compile เองดีกว่า
version ที่ผมใช้ก็คือ r12-b3 - ติดตั้ง rabbitemq-server
ตัวนี้ให้ download source version 1.4.0 มา เวลา compile ก็แค่สั่ง make เป็นอันเสร็จพิธี - ทำให้ erlang มองเห็น rabbitmq-server module
ถ้าเราติดตั้ง erlang ด้วยการ compile code เอง, modules path ของ erlang จะอยู่ที่ /usr/local/lib/erlang/lib
โดยมีหน้าตาประมาณนี้
pphetra@[/usr/local/lib/erlang/lib]
$ ls
appmon-2.1.9 dialyzer-1.8.1 mnesia-4.4.3 ssl-3.9
asn1-1.5.2 docbuilder-0.9.8.4 observer-0.9.7.4 stdlib-1.15.3
common_test-1.3.2 edoc-0.7.6 orber-3.6.9 syntax_tools-1.5.5
...
ให้ทำ symbolic link กับ directory rabbitmq-server-1.4.0
Note: ตรงนี้ให้ระวังชื่อด้วย เพราะ code ของ rabbiter มันต้องการให้เป็นชื่อ rabbitmq_server เป๊ะๆ
$ ls -l rab*
lrwxr-xr-x 1 root pphetra 40 Aug 27 13:05 rabbitmq_server -> /Users/pphetra/dev/rabbitmq-server-1.4.0 - ขั้นถัดไปก็ clone เจ้า rabbiter จาก github
Note: ใครที่สั่ง clone แล้วเกิด error timeout ให้ลองเปลี่ยน url จาก git://github.com/tonyg/rabbiter.git
เป็น http://github.com/tonyg/rabbiter.git
เมื่อได้มาแล้ว ก็ทิ้งไว้ก่อน เดี๋ยวเราจะไปฝาก compile กับ ejabberd - ติดตั้ง ejabberd, ตัวนี้ให้ใช้ version 2.0.1
ก่อน compile ก็ให้ไปแอบทำ symbolic link เจ้า file mod_rabbiter.erl เข้ามาใน directory ejabberd-2.0.1/src เสียก่อน
(หรือจะเล่นลูกทุ่ง copy เอาดื้อๆ ก็ไม่ผิด) - config ejabberd ให้รู้จัก rabbiter
โดย edit /etc/ejabberd/ejabberd.cfg
เพิ่ม บรรทัดนี้ลงไป
{modules,
[
{mod_adhoc, []},
{mod_announce, [{access, announce}]}, % recommends mod_adhoc
{mod_caps, []},
...
{mod_rabbiter, []},
...
การทดสอบ
- สั่ง start ejabberd ด้วยคำสั่ง
/sbin/ejabberdctl start
ตรวจสอบว่า start สำเร็จหรือไม่ ด้วยคำสั่ง/sbin/ejabberdctl status
$ ./ejabberdctl status
Node ejabberd@localhost is started. Status: started
ejabberd is running - add user
$ ./ejabberdctl register pphetra localhost mypassword
$ ./ejabberdclt register sugree localhost anypassword - ทดลองใช้ IM ต่อเข้ามา โดยระบุตัวตนเป็น pphetra
จากนั้นก็ add contact rabbiter@rabbiter.localhost
ลองสั่ง*help
ก็จะได้ message แบบนี้
To give me a command, choose one from the list below. Make sure you prefix it with '*', otherwise I'll interpret it as something you want to send to your group of followers. You can say '*help (command)' to get details on a command you're interested in. If you want to actually say 'help', rather than asking for help, type '*say help' instead.
["*help","*follow","*unfollow","*following","*followers",
"*invite"]
ลองสั่ง*follow sugree@localhost
ก็จะได้รับ message แบบนี้
You are now following sugree@localhost.
Note: user sugree ต้องเคย logon ก่อนด้วย IM client ไม่งั้น จะได้ error เป็นแบบนี้
I don't know that person. Perhaps you could invite them to get in touch?
Note: ตอนทดสอบต้องระวังประเด็นที่ IM client แอบแก้ message ของเรา เช่น pidgin บน linux, ที่เวลาเราสั่ง
*follow x@y
มันจะแอบเปลี่ยนเป็น *follow x@y <mailto:x@y>
ซึ่งส่งผลให้ rabbiter ไม่รู้จักคำสั่งนี้
3 comments:
สุดยอด
ขอบคุณครับ เดี๋ยวต้องเอามาลองมั่ง อยากรู้ว่ามันจะเก็บ followers ยังไง
แจ่มเลยครับ
Post a Comment