เมื่อเร็วๆ นี้ PHPChina ได้เปิดตัวหัวข้อพิเศษเกี่ยวกับเทคโนโลยีห้องสนทนา PHP เมื่อเร็วๆ นี้ ฉันเพิ่งทำงานในโครงการนี้ ดังนั้นฉันจึงอยากจะแสดงความคิดเห็นส่วนตัวที่นี่
ฟังก์ชั่นหลักของห้องสนทนา:
1. ลงทะเบียน เข้าสู่ระบบ ออกจากระบบ แก้ไขข้อมูล
2. ผู้ใช้สมัครเพื่อสร้างห้องสนทนาและปรับแต่งคุณลักษณะห้องสนทนา
3. แสดงชื่อห้องสนทนา คำอธิบาย ผู้ดำเนินรายการ ประกาศ และโฆษณา
4. แสดงรายชื่อผู้ใช้ออนไลน์แบบเรียลไทม์ และคุณสามารถดูข้อมูลผู้ใช้ออนไลน์ (ชื่อเล่น อีเมล IP เวลาออนไลน์ ฯลฯ)
5. โพสต์เนื้อหาแชท คุณลักษณะแบบอักษร การกระทำ สำนวน และวลีทั่วไป
6. อนุญาตให้ซ่อนตัว แชทส่วนตัว การเลื่อน การบล็อกผู้ใช้ การล้างหน้าจอ การเลือกฉากแชท เพลงพื้นหลัง และการปรับแต่งวิธีการส่ง
7. ผู้ดูแลระบบมีสิทธิ์จัดการสมาชิก (ไล่พวกเขาออก ห้ามไม่ให้พูด และโอนสิทธิ์การจัดการ)
สิ่งที่ควรทราบ:
1. ห้ามใช้โครงสร้างเฟรม (iframe ไม่ได้ก่อให้เกิดประโยชน์ใด ๆ ยกเว้นการลดภาระงานของคุณ)
2. รหัสส่วนหน้าและพื้นหลังจะถูกแยกออกจากกันอย่างสมบูรณ์ ข้อมูลจะถูกส่งผ่านช่องทาง Ajax เท่านั้น และควรส่งข้อมูลที่จำเป็นเท่านั้น (แสดงข้อมูลในเบื้องหน้าและประมวลผลข้อมูลในเบื้องหลัง)
3. ห้ามมิให้รีเฟรชทั้งหน้าที่เกิดจากโปรแกรมและอัปเดตเฉพาะเนื้อหาที่จำเป็นต้องเปลี่ยนแปลงเท่านั้น (ห้ามใช้ส่วนหัวและเมตาเพื่อรีเฟรชหน้า)
4. เมื่อส่งเนื้อหาแชท คุณจะไม่สามารถติดตามความเร็วของประสบการณ์ผู้ใช้โดยสุ่มสี่สุ่มห้าและเพิกเฉยต่อคำสั่งส่งบันทึกแชทจริง (กล่าวคือ บันทึกการสนทนาที่ส่งมาควรจัดระเบียบใหม่ตามลำดับจริงบนเซิร์ฟเวอร์แล้วส่งไปยังลูกค้า เนื่องจากอาจมีหลายคนส่งข้อมูลในเวลาเดียวกัน)
เทคโนโลยีที่ใช้:
1. สะพานเชื่อมระหว่างส่วนหน้าและส่วนหลัง-AJAX คุณสามารถเลือก jquery, XAJAX ฉันชอบ jquery ซึ่งเร็ว เรียบง่าย และทนทาน มีปลั๊กอินมากมาย และอัปเดตอย่างรวดเร็ว
2. รูปแบบของผู้ให้บริการข้อมูล-XML ที่จริงแล้ว ข้อมูลห้องสนทนาทั่วไปไม่ได้ซับซ้อนมากนัก และ json ก็เพียงพอแล้ว
3. เลเยอร์นามธรรมของฐานข้อมูล - ADODB ใช้ PDO ได้เร็วกว่า ฉันคุ้นเคยกับการใช้ ADODB แล้ว
4. สื่อจัดเก็บข้อมูลพื้นฐาน - MySQL ไม่มีข้อสงสัยเกี่ยวกับเรื่องนี้
5. ข้อมูลสื่อกลางการจัดเก็บข้อมูลระดับกลาง - memcache จัดเก็บข้อมูลการอ่านและเขียนความเร็วสูงไว้ในหน่วยความจำที่ใช้ร่วมกันของ Memcache เพื่อลดภาระในฐานข้อมูล
6. หากคุณต้องการใช้งานวิดีโอและเสียง คุณต้องได้รับการสนับสนุนจากเซิร์ฟเวอร์ FMS (เซิร์ฟเวอร์สื่อแฟลช) และไคลเอนต์จำเป็นต้องติดตั้ง Flash Player และเกี่ยวข้องกับการโต้ตอบข้อมูลระหว่าง html, javascript, flash และพื้นหลัง มีข้อมูลไม่มากเกี่ยวกับเรื่องนี้
สิ่งเหล่านี้คือเทคโนโลยีหลัก ในการพัฒนาแอปพลิเคชันจริง ยังมีประเด็นรายละเอียดอีกมากมายที่ต้องได้รับการแก้ไข
ตัวอย่างเช่น: วิธีจัดการกับการอัปเดตรายการออนไลน์
มีสองวิธี:
1. รีเฟรชรายการทั้งหมด (ไม่ว่าจะมีการอัปเดตหรือไม่ก็ตาม)
2. เพิ่มสมาชิกออนไลน์ใหม่ ลบสมาชิกออฟไลน์ และเปลี่ยนสมาชิกที่มีการเปลี่ยนแปลงข้อมูล
แน่นอนว่าตัวเลือกที่สองคือตัวเลือกที่ดีที่สุด
วิธีจัดการกับปัญหาการทำงานพร้อมกันของ XmlHttpRequest
JavaScript เป็นแบบเธรดเดียว หากมีอ็อบเจ็กต์ XmlHttpRequest สองรายการพร้อมกัน ปัญหาอาจเกิดขึ้นได้ง่าย ซึ่งทำให้เราต้องควบคุมการสร้างและการสิ้นสุดของ XmlHttpRequest
ในห้องสนทนา ข้อมูลที่เราต้องอัปเดตส่วนใหญ่ได้แก่: รายชื่อออนไลน์ (รวมถึงการอัปเดตข้อมูลสมาชิก) บันทึกการสนทนา คุณลักษณะของห้องสนทนา ฯลฯ ความถี่ของการอัปเดตเหล่านี้ไม่สอดคล้องกัน (หากเวลาสอดคล้องกัน คุณจะต้องสร้าง XmlHttpRequest เพื่อจัดการเท่านั้น) ประวัติการแชทจะใช้เวลาในการอัปเดตสั้นลง และรายการออนไลน์อาจใช้เวลาอัปเดตนานกว่าเล็กน้อย โดยไม่ใช้กรอบงาน ถ้าคุณสร้างวัตถุ XmlHttpRequest แยกต่างหาก ปัญหาการทำงานพร้อมกันมีแนวโน้มที่จะเกิดขึ้น สิ่งนี้จำเป็นต้องสร้างฟังก์ชันการควบคุมเวลาและกระบวนการ
setInterval('process_control()',3000) //ถูกเรียกทุกๆ สามวินาที
ฟังก์ชัน process_control จะใช้การจัดตารางเวลางาน เช่น การดำเนินการงานในช่วงเวลาที่กำหนด และการดำเนินการงานถัดไปหลังจากงานเสร็จสิ้นเท่านั้น