Monday, October 09, 2006

ทดสอบ Cometd

วันนี้ทดลองทดสอบ Cometd
โดย definition ของ Cometd ก็คือ

Cometd is a scalable HTTP-based event routing bus that uses a push technology pattern known as Comet.

สิ่งที่ Cometd พยายามทำ ก็คือ การกำหนดมาตรฐาน protocol สำหรับ client กับ cometd server
ตัว draft ของ Protocol สามารถดูได้ที่นี่
http://svn.xantus.org/shortbus/trunk/bayeux/protocol.txt

ตัว Cometd server ตอนนี้เห็นว่ามี implement ด้วย
python, http://svn.xantus.org/shortbus/trunk/cometd-twisted/
perl http://svn.xantus.org/shortbus/trunk/cometd-perl/
แล้วก็ Java
(ผมก็กะว่าจะทำ erlang version เหมือนกัน)

ในฝั่ง Java ตอนนี้มี Jetty เป็นหัวหอก
โดยใน jetty version 6 , jetty provide CometdServlet มาให้เลย (อยู่ใน directory extras)

ที่ Jetty เป็นหัวหอกในเรื่องนี้ ก็เพราะเขามี feature Continuations ที่คนอื่นยังไม่มี
เขาก็เลย implement และผลักดัน Cometd ได้อย่างไม่เกรงกลัวว่าจะทำให้เกิดปัญหา server overload
(เคยเขียนเรื่อง Jetty Continuations ไปแล้ว ตามอ่านได้ที่นี่ Link)

สำหรับในส่วน client ตอนนี้ก็มี Dojo ที่ implement ใน Trunk แล้ว
โดยอยู่ใน package dojo.io.cometd
ประเด็นที่น่าสนใจใน Dojo Cometd client ก็คือ
technique ของการ implement มีให้เลือกหลายแบบคือ
  • iFrame
  • mime-message-block
  • long-poll
  • callback-polling

ผมลองทดสอบแค่ long-poll
เท่าที่ลองทดสอบดูในเบื้องต้น ก็พบปัญหาว่า
jetty return response ในตอน handshake กลับมาไม่ตรงตาม Spec ใน protocol
(แทนที่จะ return array ครอบ json Object, มันกลับ return json Object มาเลย,
ผมใช้วิธี quickfix แก้ source code ใน dojo ให้ทำงานได้ไปก่อน)
ปัญหาอีกข้อที่เจอก็คือ ตัว Demo ยัง run ใน IE หรือ Safari ไม่ได้

Related link from Roti

No comments: