Simple websocket server using heroku free nodejs cloud.
Buat akun Heroku di url:
https://signup.heroku.com/
Download dan install HeroKu cli di url:
https://devcenter.heroku.com/articles/heroku-cli#download-and-install
Download dan install git di url:
https://git-scm.com/book/en/v2/Getting-Started-Installing-Git
Setelah semuanya selesai, lakukan langkah berikut.
- login :
- buka cmd lalu ketik "heroku login", lakukan login pada browser yang telah terbuka.
- clone project from github :
- arahkan ke directory yang diinginkan "cd D:\heroku-project"
- untuk contoh project dapat di fork dari repo ini.
- clone project yang sudah dibuat dari github, contoh : "git clone https://github.com/user/nodejs-heroku"
- arahkan ke directory project tersebut "cd nodejs-heroku"
- lakukan penyesuaian (edit code, delete or something else)
- upload to heroku :
- dari cmd ketikkan "heroku create"
- lalu "git push heroku master"
- untuk start aplikasi yang sudah diupload :
- ketikkan "heroku ps:scale web=1 --app nama-aplikasi-nya"
- untuk membuka aplikasi :
- "heroku open"
- untuk melihat log debug :
- "heroku logs --tail"
Untuk dokumentasi lengkap bisa diakses melalui url:
https://devcenter.heroku.com/articles/getting-started-with-nodejs
- login :
- buka cmd lalu ketik "heroku login", lakukan login pada browser yang telah terbuka.
- clone :
- arahkan ke directory yang diinginkan "cd D:\heroku-project"
- clone heroku project "heroku git:clone -a myproject-some-53694"
- arahkan directory "cd myproject-some-53694"
- edit your project
- update heroku project :
- "git add ."
- "git commit -am 'catetan perubahan'"
- "git push heroku master"
Untuk dokumentasi lengkap bisa diakses melalui url:
https://dashboard.heroku.com/apps/myproject-some-53694/deploy/heroku-git
- buka CMD, arahkan ke directory project. contoh "cd D:\heroku\my-project"
- login ke heroku. "heroku login"
- arahkan ke spesifik project. "heroku git:remote -a my-project"
- lakukan perubahan, edit delete or somethings else with your project.
- update and push :
- "git add ."
- "git commit -am 'catetan perubahan'"
- "git push heroku master"
- Project github yang bisa diupload ke server heroku hanya project yang berisi git.
- Untuk struktur package.json bisa mengikuti contoh atau buka dokumentasi untuk informasi lengkapnya.
- Jika ini adalah awal memakai git, disaat melakukan "git commit" nanti akan ditolak pada saat pertama, lakukan git config untuk bisa melakukan git commit, contoh "git config --global user.email '[email protected]'" dan "git config --global user.name 'ali topan'".
- Nama project akan di generate oleh heroku server, nama itu akan muncul pada saat kita melakukan "git push heroku master" dan dapat dibuka ketika kita melakukan "heroku open".
- Untuk contoh didalam readme ini adalah "myproject-some-53694" dan dapat diakses aplikasinya melalui "myproject-some-53694.herokuapp.com"
- Nama project untuk contoh ini (myproject-some-53694 | myproject-some-53694.herokuapp.com) hanya dummy dan tidak dapat diakses.
- Untuk melihat dashboard dapat diakses melalui Heroku Dashboard.
- Untuk delete aplikasi dapat diakses melalui
https://dashboard.heroku.com/apps/myproject-some-53694/settings
- Yang paling terpenting untuk deploy nodejs didalam heroku harus menggunakan express (web apps).
- Karena saya sudah mencoba hanya menggunakan project murni websocket hasilnya tidak dapat jalan secara normal di heroku (atau memang saya salah confignya yah :D).
- Untuk project websocket di heroku disaat idle (selama bbrp detik) client akan otomatis close connection.
- Berdasarkan explorasi semalaman tentang issue ini, ternyata memang seperti itu, tidak ada kesalah config ataupun coding disisi client ataupun server websocket. Untuk mensiasati hal ini tidak disarankan untuk melakukan reconnecting (dan memang dokumentasi websocket tidak tersedia function ini) secara manual, yang disarakan adalah melakukan "ping-pong" antara client dan server agar koneksi "keep-alive".
- Error: Multiple apps in git remote.
D:\bangjii\nodejs\heroku\jamblang-thepurple>heroku ps:scale web=0
» Error: Multiple apps in git remotes
» Usage: --remote cempedak-thejackfruit
» or: --app mysterious-dust-12345
» Your local git repository has more than 1 app referenced in git
» remotes.
» Because of this, we can't determine which app you want to run this
» command against.
» Specify the app you want with --app or --remote.
» Heroku remotes in repo:
» cempedak-thejackfruit (heroku)
» mysterious--dust-12345 (doyou-knowapp)
»
» https://devcenter.heroku.com/articles/multiple-environments
Itu karena telah melakukan perubahan nama pada git heroku dan project lama telah dihapus. Jadi git heroku mendeteksi adanya lebih dari satu repository, dan jika kita mau melakukan remote harus menggunakan --app nama-aplikasi dibelakang command yang akan dilakukan. Untuk menghapus total git heroku itu ketik "git remote rm nama-aplikasi". Dan command "heroku ps:scale web=0" pun dapat dijalankan kembali (tanpa --app nama-aplikasi).
- Untuk debug log dari aplikasi yang kita buat dapat diakses melalui cmd / terminal
heroku logs --tail
- Untuk restart aplikasi
heroku restart
- PENTING! websocket didalam heroku idling time nya 55 detik. Jika dalam waktu tersebut tidak ada aktifitas komunikasi antara server dan client maka websocket server akan closed. Untuk mensiasatinya adalah dengan menggunakan method ping-pong yaitu send websocket (server dan client) secara berkala untuk menjaga koneksi keepalive.
setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify({keepalive:"PING!"})); //anything yg pntg kirim apaan kek
}
}, 55000);
- Heroku - Official site Heroku.
- Rename Project Heroku - Renaming Apps & Delete git from the CLI.
- WebSocket Issues - Official github WebSocket issues Reconnection and KeepAlive.
- Hudzaifah Al Jihad - Initial work - bangjii