เมื่อคืนคุยกับคุณ up1 ใน twitter เรื่อง Comet ก็เลยได้ฤกษ์ลอง feature ใหม่ใน ZK 3.5
เรื่องของเรื่องคือผมเล็งจะทำไว้ตั้งนานแล้วตั้งแต่คิดจะเขียน vvtalk โปรแกรม audio presentation ใหม่ (จากเดิมใช้ OpenLaszlo แล้วคนบน OS X พิมพ์ไทยไม่ได้เพราะเป็น Flash เลยคิดจะ port มาเป็น ZK)
หลายคนอาจจะยังไม่รู้จัก Comet ผมยกตัวอย่างเป็น application ก็แล้วกันครับ มันคือวิธีการที่ทำให้เราดูราคาหุ้นแบบ realtime ได้บนหน้า web ที่เป็น HTML และทางเทคนิคตัว server ก็รับ load ได้มากด้วยการใช้ continuation
ZK 3.5 ซ่อนความซับซ้อนของ Comet ไว้ใต้ programming model แบบ Thread ดังนั้นจึงแทบไม่ต้องจัดการอะไรเลย ทำแค่ active / deactive ตัว desktop (ซึ่งผมเดาว่าเป็นการบังคับ continuation) ใน Thread.run() ก็ได้ Comet ของแท้ไว้ใช้ (อีก model คือใช้ Pulling Ajax)
ยิ่งพอมารวมกันกับ Thread programming model ใน Groovy ก็ยิ่งง่ายเข้าไปใหญ่ ทำให้ลดรูปเหลือประมาณที่เห็น
จริง ๆ พยายามจะเขียนอยู่หลายรอบแต่เขียนไม่ออก พอดึก ๆ เข้าหน่อยก็ ยูเรก้า ซาโตริ เพราะการ resolve ตัว object ใน GUI (ในที่นีคือ label ชื่อ test) ทำไม่ได้ใน Thread เนื่องจากมันอยู่นอก event loop ของ ZK ก็เลยต้องมี closure (ชื่อ doit) ครอบอีกรอบนึง แล้วเรียก closure นั้นใน Thread
ในตัวอย่างนี้เป็นงานง่าย ๆ ครับคือค่อย ๆ นับ 0-49 ทุก ๆ 2 วินาที ที่เหลือก็ประยุกต์กันตามสะดวก
<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<?page zscriptLanguage="GroovyGrails"?>
<zk>
<zscript>
if(!desktop.serverPushEnabled) desktop.enableServerPush(true);
doit = { it ->
Executions.activate(desktop);
try {
test.value = it
} finally {
Executions.deactivate(desktop);
}
}
Thread.start {
50.times {
doit(it)
sleep 2000
}
}
</zscript>
<vbox>
<label id="test" value="test" />
</vbox>
</zk>
Tags: comet, grails, server push, zk
September 16th, 2008 at 8:05 am
กำลังต้องการเลยครับ
September 16th, 2008 at 1:51 pm
เร็วมากเลยครับ
ผมกำลังดูเรื่อง comet เหมือนกันครับ น่าจะได้เรื่องเร็วๆ นี้
September 16th, 2008 at 2:54 pm
ขอบคุณครับ รู้สึกว่าพวก Instant Messenger ก็ใช้ Comet เหมือนกัน
September 16th, 2008 at 9:16 pm
เห็นแล้วก็ต้องไป download zk source code มาดูว่ามันทำงานอย่างไรบ้าง