Aplikasi Obrolan Waktu Nyata yang dibuat menggunakan Node.js, Express, Mongoose, Socket.io, Passport, & Redis.
Periksa Demo
Pastikan Anda telah menginstal Node.js dan npm.
Kloning atau Unduh repositori
$ git clone https://github.com/OmarElGabry/chat.io.git
$ cd chat.io
Instal Dependensi
$ npm install
Edit file konfigurasi di app/config/config.json dengan kredensial Anda (lihat Konfigurasi Pengaturan).
Unduh dan Instal Redis.
Menjalankan Redis Server (sebagai Admin)
$ redis-server
Mulai aplikasi
$ npm start
Aplikasi Anda sekarang seharusnya berjalan di localhost:3000.
Pastikan Anda telah menginstal Heroku Toolbelt.
Buat aplikasi Heroku baru, dan dorong aplikasi obrolan Anda ke repositori jarak jauh Git
$ heroku create
$ git push heroku master
atau
Sekarang, Anda perlu menyiapkan variabel konfigurasi di Heroku.
{ dbURI, sessionSecret, facebookClientID, facebookClientSecret, twitterConsumerKey, twitterConsumerSecret }
(lihat Konfigurasi Penyiapan).Langkah terakhir adalah menambahkan Redis sebagai Add-on di Heroku.
Anda perlu menyiapkan akun penagihan meskipun add-onnya gratis.
Buka aplikasi obrolan Anda di browser
$ heroku open
Konfigurasi produksi akan ditetapkan dari Variabel Lingkungan di Heroku, sedangkan konfigurasi pengembangan berada di dalam file app/config/config.json .
Anda perlu membuat database di MongoLab, lalu membuat pengguna database, mendapatkan MongoDB URI
, dan menetapkannya ke dbURI
.
Anda perlu mendaftarkan aplikasi baru di Facebook dan Twitter untuk mendapatkan token yang dapat digunakan pengguna untuk memberikan akses ke aplikasi Anda, dan masuk menggunakan akun sosial mereka.
App ID
Anda, App Secret
. Sekarang, Anda dapat menetapkan App ID
ke facebookClientID
, dan App Secret
ke facebookClientSecret
.
Consumer Key
Anda, Consumer Secret
. Sekarang, Anda dapat menetapkan Consumer Key
ke twitterConsumerKey
, dan Consumer Secret
ke twitterConsumerSecret
.
Itu bisa menunjuk kembali ke localhost Anda; http://localhost:3000/auth/facebook/callback
Saat diterapkan ke Heroku, Anda akan melihat tampilan seperti ini; http://my-chat-app.herokuapp.com/auth/facebook/callback
Sesi ini memerlukan string acak untuk memastikan id sesi di browser acak. String acak itu digunakan untuk mengenkripsi id sesi di browser, Mengapa? Untuk mencegah tebakan id sesi.
Mongoose digunakan untuk berinteraksi dengan MongoDB yang dihosting oleh MongoLab.
Ada dua skema; pengguna dan ruangan.
Setiap pengguna memiliki nama pengguna, kata sandi, Id sosial, dan gambar. Jika pengguna login melalui nama pengguna dan kata sandi, maka Id sosial harus nol, dan jika login melalui akun sosial, maka kata sandinya akan nol.
Setiap ruangan memiliki judul, dan rangkaian koneksi. Setiap item dalam array koneksi mewakili pengguna yang terhubung melalui soket unik; objek yang terdiri dari {userId + socketId} . Keduanya bersama-sama adalah unik.
Setiap model membungkus objek Model Mongoose, menimpa dan menyediakan beberapa metode. Ada dua model; Pengguna dan Ruangan.
Sesi dalam aplikasi Express paling baik dikelola menggunakan paket sesi ekspres. Data sesi disimpan secara lokal di komputer Anda, sementara itu disimpan dalam database di lingkungan produksi. Data sesi akan dihapus saat logout.
Pengguna dapat login menggunakan nama pengguna dan kata sandi, atau login melalui akun sosial. Otentikasi pengguna dilakukan menggunakan Paspor. Passport memiliki dokumentasi ekstensif dan langkah demi langkah tentang cara menerapkan setiap cara autentikasi.
Memiliki koneksi aktif yang terbuka antara klien dan server sehingga klien dapat mengirim dan menerima data. Hal ini memungkinkan komunikasi real-time menggunakan soket TCP. Hal ini dimungkinkan oleh Socket.io.
Klien memulai dengan menghubungkan ke server melalui soket (mungkin juga ditugaskan ke namespace tertentu). Setelah koneksi berhasil, klien dan server dapat memancarkan dan mendengarkan peristiwa.
Ada dua namespace yang digunakan; /rooms
dan /chatroom
.
Dan tentu saja, Anda perlu memantau aplikasi Anda. Winston dapat mencatat dan menangkap Pengecualian yang Tidak Tertangkap. Semua log ditampilkan di konsol, dan disimpan dalam file debug.log .
Di Heroku, Anda dapat memantau log dengan mengklik Lainnya -> Lihat Log di kiri atas dasbor aplikasi Anda.
Saya telah menulis skrip ini di waktu luang saya selama studi saya. Jika Anda merasa ini berguna, mohon dukung proyek ini dengan menyebarkannya.
Berkontribusi dengan membuat isu baru, mengirimkan pull request di Github atau Anda dapat mengirim email di: [email protected]
Dibangun di bawah lisensi MIT.