javascript - Menulis Aplikasi Masa Sebenar dengan NodeJS
Saya tidak sabar untuk membina aplikasi web RT dengan NodeJS. Datang dari Rails, saya telah jatuh cinta dengan NodeJS dan pengaturcaraan JS Async.
Jalankan beberapa eksperimen dengan Node, dan kemudian semasa saya mencari alat dan sumber untuk membiasakan diri, saya berasa terharu dengan banyak perkara di sana.
Saya menjumpai banyak perpustakaan dan komponen di sana, dan agak keliru tentang bagaimana aplikasi web RT berskala besar yang ditulis dan diimplementasikan dengan baik sepatutnya dibina.
Jadi aplikasi ini akan dijalankan menggunakan NodeJS, dengan menggunakan rangka kerja Express.
Saya membaca tentang knockout.js, sebuah perpustakaan sisi-klien untuk menyediakan perkara masa nyata seperti penyegaran UI automatik, dan saya rasa saya boleh menggabungkannya dengan jQuery. Selain itu, saya menjumpai socket.io. Pengarang berkata: Socket.IO bertujuan untuk menjadikan aplikasi masa nyata boleh digunakan di setiap pelayar dan peranti mudah alih, mengaburkan perbezaan antara mekanisme penghantaran yang berbeza. Ia adalah masa nyata tanpa kebimbangan 100% dalam JavaScript. Jadi socket.io adalah tentang keserasian. Bagaimana pula dengan backbone.js? Di manakah ia digunakan?
Dengan banyaknya perkara, saya terkejut. Apa yang patut saya pelajari? Modul mana yang berbaloi untuk dipelajari? Saya memfokus kepada NodeJS dan Express tetapi kebanyakan buku/screencast merangkumi versi lama NodeJS. Jadi saya mengikuti panduan API rasminya. Sekarang saya di sini untuk meminta nasihat anda dan untuk menyusun semua maklumat yang ada. Betulkan saya jika anda rasa andaian saya tidak tepat, sila tunjukkan arah yang betul dan jangan ragu untuk mencadangkan modul lain yang boleh membantu pembelajaran saya.
Terima kasih terlebih dahulu
Jawapan #1
Mungkin berguna untuk anda memisahkan perpustakaan sisi pelayan node.js (melalui npm dan sebagainya) daripada semua perpustakaan dan teknologi sisi klien (pelayar) seperti jquery, backbone, knockout dan sebagainya apabila anda memikirkannya. Walaupun socket.io yang mengekspos sambungan soket berterusan antara pelayar dan pelayan (untuk mengelakkan polling) tidak menentukan teknologi sisi klien yang anda gunakan.
Tumpukan pada mendedahkan web-api yang kukuh (contoh rawak) dari server anda dan teknologi klien anda boleh ditukar, ditambah, dan sebagainya... tanpa memberi kesan kepada server. Satu-satunya tempat ia bersilang ialah jika anda menggunakan teknologi paparan seperti Jade. Ia juga satu pilihan untuk mempunyai pemisahan yang tulen di mana server hanya menyajikan fail klien dan klien anda adalah aplikasi javascript yang lebih tebal (menggunakan knockout, jquery dan sebagainya...) yang memanggil web api server yang baik.
Sesetengah orang cuba menyatukan model klien dan pelayan - contohnya, artikel ini menggunakan backbone dan node. Ia bergantung pada berapa banyak data yang anda bekerjasama untuk mengatakan sama ada itu boleh dilakukan tetapi ia memang mengaitkan klien dan pelayan dan menjadikan pelayan berstatus yang boleh mempunyai kesan negatif (skala keluar, memerlukan afiniti dan sebagainya...). Secara peribadi, saya menjadi bimbang dengan terlalu banyak 'magik' itu (pautan, status, menyegerakkan dan sebagainya...). Node adalah tentang menjaga perkara tetap mudah, ringan dan pantas. Ia adalah pelayan rangka hadapan yang pantas.
Pendapat saya (dan ada yang mungkin tidak setuju). Mulakan dengan node pada pelayan dan pilih storan anda (mongoDb dan lain-lain...). Reka API RESTful (hipermedia) yang mantap - webapi yang baik tanpa mengira klien. Kemudian mulakan dengan klien html/css/js asas, mungkin jquery, dan tambah perkara seperti knockout dan lain-lain... apabila anda memperluas kemahiran klien anda. Itu akan membolehkan anda menggantikan teknologi klien anda secara bebas daripada pelayan apabila teknologi baru datang dan berubah (dan ia pasti akan berlaku).
Itulah ciri sistem yang direka dengan baik - keupayaan untuk menggantikan komponen/sub-sistem tanpa menulis semula semuanya :)
Harap itu membantu menghapuskan sedikit kekeliruan :)
Jawapan #2
Anda mungkin ingin melihat Meteor jika anda memberi tumpuan kepada aplikasi Javascript masa nyata: http://meteor.com/