วันนี้ทดลองทดสอบ
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 ไม่ได้