Baru-baru ini, PHPChina telah meluncurkan topik khusus tentang teknologi ruang obrolan PHP. Saya kebetulan sedang mengerjakan proyek ini, jadi saya ingin mengungkapkan pandangan pribadi saya di sini.
Fungsi utama ruang obrolan:
1. Daftar, masuk, keluar, ubah informasi.
2. Pengguna mengajukan permohonan untuk membuat ruang obrolan dan menyesuaikan atribut ruang obrolan.
3. Menampilkan nama ruang obrolan, deskripsi, moderator, pengumuman, dan iklan.
4. Menampilkan daftar pengguna online secara real time, dan Anda dapat melihat informasi pengguna online (nama panggilan, email, IP, waktu online, dll.).
5. Posting konten obrolan, atribut font, tindakan, ekspresi, dan frasa umum.
6. Memungkinkan tembus pandang, obrolan pribadi, pengguliran, pemblokiran pengguna, pembersihan layar, pemilihan adegan obrolan, musik latar, dan penyesuaian metode pengiriman.
7. Pengurus berhak mengatur anggota (mengeluarkan, melarang berbicara, dan mengalihkan hak pengelolaan).
Hal yang perlu diperhatikan:
1. Dilarang menggunakan struktur rangka (iframe tidak membawa manfaat apa pun kecuali mengurangi beban kerja Anda)
2. Kode front-end dan latar belakang dipisahkan sepenuhnya, data hanya dikirimkan melalui saluran ajax, dan hanya data yang diperlukan yang harus dikirimkan. (Menampilkan data di latar depan dan memproses data di latar belakang)
3. Dilarang me-refresh seluruh halaman yang disebabkan oleh program, dan hanya mengupdate konten yang perlu diubah (dilarang menggunakan header dan meta untuk me-refresh halaman).
4. Saat mengirimkan konten obrolan, Anda tidak bisa begitu saja mengejar kecepatan pengalaman pengguna dan mengabaikan perintah pengiriman rekaman obrolan yang sebenarnya. (Artinya, rekaman obrolan yang dikirimkan harus diatur ulang dalam urutan sebenarnya di server dan kemudian dikirimkan ke klien, karena banyak orang dapat mengirimkan informasi pada saat yang sama)
Teknologi yang digunakan:
1. Jembatan antara frontend dan backend-AJAX. Anda dapat memilih jquery, XAJAX. Saya lebih suka jquery, yang cepat, sederhana dan tahan lama, memiliki banyak plug-in, dan diperbarui dengan cepat.
2. Bentuk pembawa data-XML. Faktanya, data ruang obrolan secara umum tidak terlalu rumit, dan json saja sudah cukup.
3. Lapisan abstraksi database-ADODB. Lebih cepat menggunakan PDO. Saya sudah terbiasa menggunakan ADODB.
4. Media penyimpanan data yang mendasarinya adalah MySQL. Tidak ada keraguan tentang hal ini.
5. Media penyimpanan perantara data-memcache. Simpan data baca dan tulis berkecepatan tinggi di memori bersama memcache untuk mengurangi beban pada database.
6. Jika Anda ingin mengimplementasikan video dan suara, Anda memerlukan dukungan server FMS (flash media server), dan klien perlu menginstal flash player. Dan itu melibatkan interaksi data antara html, javascript, flash dan latar belakang. Tidak banyak informasi mengenai hal ini.
Ini adalah teknologi inti. Dalam pengembangan aplikasi sebenarnya, masih banyak masalah mendetail yang perlu diselesaikan.
Misalnya: Bagaimana cara menangani pembaruan daftar online?
Ada dua cara:
1. Refresh seluruh daftar (apakah ada pembaruan atau tidak).
2. Menambah anggota online baru, menghapus anggota offline, dan mengganti anggota yang informasinya berubah.
Tentu saja pilihan kedua adalah pilihan terbaik.
Bagaimana cara mengatasi masalah konkurensi XmlHttpRequest?
JavaScript adalah single-threaded. Jika ada dua objek XmlHttpRequest pada saat yang sama, masalah dapat dengan mudah terjadi, yang mengharuskan kita mengontrol pembuatan dan akhir XmlHttpRequest.
Di ruang obrolan, data yang perlu kami perbarui terutama meliputi: daftar online (termasuk pembaruan informasi anggota), catatan obrolan, atribut ruang obrolan, dll. Frekuensi pembaruan ini tidak konsisten (jika waktunya konsisten, Anda hanya perlu membuat XmlHttpRequest untuk menanganinya). Riwayat obrolan membutuhkan waktu lebih singkat untuk diperbarui, dan daftar online membutuhkan waktu lebih lama untuk diperbarui. Tanpa menggunakan kerangka kerja, jika Anda membuat objek XmlHttpRequest secara terpisah, masalah konkurensi mungkin akan terjadi. Ini memerlukan pembuatan fungsi kontrol waktu dan proses.
setInterval('process_control()',3000) //Dipanggil setiap tiga detik sekali
Fungsi process_control mengimplementasikan penjadwalan tugas, seperti menjalankan tugas pada interval tertentu dan menjalankan tugas berikutnya hanya setelah tugas selesai.