Tags:

ผมเขียนเว็บด้วย PHP JavaScript แล้วต้องมีฟังก์ชันนึงที่จะต้อง check MySQL ตลอดครับ ผมจึงเลือกใช้ JavaScript setinterval เพื่อวนลูป check ค่าใน MySQL ทุกๆ 10 วินาที ด้วย Ajax โดยวนลูปจนกระทั่งมีการ insert into MySQL ครับ ผลการมำงานสามารถใช้งานได้ตามปกติครับ แต่หลังจากมีผู้ใช้งานเพิ่มมากขึ้น server ก็เกิดปัญหาล่มบ่อยครั้ง สาเหตุน่าจะมาจากการที่มีการ connection กับ MySQL มากเกินไป จากการวนลูป requests

หลังจากหาข้อมูลมาซักระยะทำให้ทราบว่า node js สามาร response ได้ต่อเนื่องโดยใช้เพียงแค่ 1 requests ทำให้ server ไม่ทำงานหนัก แต่ติดปัญหาคาใจมาคำถามนึงครับว่า node js สามารถใช้งานร่วมกับเว็บ PHP ได้มั้ยครับ เพราะเท่าที่หาข้อมูลมาไม่เห็นมีแนะนำวิธีการใช้งานร่วมกันเลยครับ ขอบคุณครับ

Get latest news from Blognone
By: varavut
ContributorWindows PhoneAndroidBlackberry
on 22 August 2018 - 10:28 #1066787

เข้าใจว่าสิ่งที่ต้องการคือ long polling คือ ส่ง request ไปเพื่อแล้วรอจนกว่าจะมีข้อมูลใหม่ หรือรอจนมี event อะไรสักอย่างใช่ไหมครับ ถ้าใช่ก็ไม่มีอะไรมากครับ ใน PHP ก็แค่วน fetch ข้อมูลไปเรื่อยๆ จนกว่าจะเจออันที่สนใจแล้วก็ตอบกลับ ฝั่ง client ก็ส่ง request ไปแค่ครั้งเดียว (ค่อยส่งใหม่ถ้า error) อาจจะต้องมีการปรับ timeout ทั้งฝั่ง server และ client นิดหน่อยครับ ลองดูตัวอย่างนี้ก็ได้

https://github.com/panique/php-long-polling

หรือว่าถ้าต้องการ stream output ออกมาเรื่อยๆ ก็ได้เหมือนกันครับ

https://stackoverflow.com/questions/7740646/jquery-read-ajax-stream-incrementally

By: lancaster
Contributor
on 22 August 2018 - 17:46 #1066884

ลองหาสาเหตุของการล่มก่อนครับว่าล่มเพราะ php หรือล่มเพราะ mysql

By: Configuleto
AndroidWindows
on 22 August 2018 - 19:58 #1066896
Configuleto's picture

นอกจากที่ท่านอื่นตอบไปแล้ว มีอีกเทคนิคคือเปลื่ยนให้ server ดันข้อมูลมาที่ client แทนครับ ใช้กันเป็นมาตฐานตอนนี้คือ SSE หรือ WebSocket

By: whitebigbird
Contributor
on 22 August 2018 - 22:07 #1066918
whitebigbird's picture

ส่วนมากมาจาก bottle neck ของ MySql นะครับ ลองทำ replication เพื่อทำ master/slave ดูครับ น่าจะดีขึ้น

ตอบคำถามเรื่อง nodejs มันจะมี response time ดีกว่าแน่ครับ แต่ปัญหาที่เว็บล่มมันน่าจะมาจาก bottleneck ของ MySql แบบที่บอกไป

ถ้าข้อมูลไม่ได้ realtime แนะนำ caching ที่ฝั่ง server ครับ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 27 August 2018 - 16:31 #1067675
mr_tawan's picture

ถ้าจำไม่ผิด php มันจะรันบน web server ผ่านทาง Fast-CGI interface ในขณะที่ NodeJS application ส่วนใหญ่จะเป็น standalone web server

ซึ่งถ้าเราทำแค่เว็บเล็ก ๆ ผมว่ารัน web server หลาย ๆ ตัวมันก็ดูจะวุ่นวายพอสมควร แต่ก็ทำได้ครับ ก็ใช้เจ้า web server ที่รัน php เนี่ยเป็น reverse proxy ส่ง request ไปให้ตัว nodejs อีกทีนึง

อีกทางเลือกนึงคือใช้ NodeJS ผ่านทาง FastCGI เหมือนกัน เห็นมีคนทำอยู่

ทั้งนี้มันขึ้นกับ hosting ด้วย ถ้า hosting ไม่คอนฟิกให้ก็จบ

ทั้งนี้ผมว่าเรื่องความเร็วไม่น่าจะหนีกันมากมายนะ อันนี้ไม่รู้เหมือนกันครับไม่เคยลอง อาจจะเหมือนที่ท่านอื่น ๆ ว่าไว้ คือน่าจะเป็ฯที่คอขวดของ DB server มากกว่า


  • 9tawan.net บล็อกส่วนตัวฮับ