Di Function Compute, Anda dapat mengonfigurasi pemicu HTTP untuk sebuah fungsi guna merespons permintaan WebSocket. Setelah pemicu HTTP dikonfigurasi, fungsi tersebut berfungsi sebagai server web untuk menangani permintaan WebSocket dan memberikan respons kepada pemanggil.
Sebelum memulai
Langkah 1: Buat fungsi
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
Pada halaman Functions, klik Create Function.
Pada halaman Create Function, pilih Use Custom Runtime, konfigurasikan parameter, lalu klik Create.
Berikut adalah parameter yang perlu dikonfigurasi. Untuk parameter lainnya, pertahankan nilai default. Untuk informasi lebih lanjut, lihat Buat fungsi.
Function Name: Masukkan nama fungsi, contohnya: websocket-demo.
Handler Type: Pilih HTTP Handler.
Runtime: Pilih Node.js 18 dari daftar drop-down.
Langkah 2: Tulis dan deploy kode
Pada halaman detail fungsi, klik tab Code dan masukkan kode fungsi di editor kode.
Di direktori saat ini WebIDE di Konsol Function Compute, salin kode berikut ke file index.js. Contoh kode:
const WebSocket = require('ws'); const WebSocketServer = WebSocket.Server; const wss = new WebSocketServer({ host: "0.0.0.0", port: 9000, }); wss.on('connection', function (ws, req) { console.log(`[SERVER] connection()`); ws.on('message', function (message) { ws.send(`${message}`, (err) => { if (err) { console.log(`[SERVER] error: ${err}`); } }); }) });CatatanAlamat IP tempat server WebSocket mendengarkan adalah
0.0.0.0, yang mencakup semua port jaringan yang tersedia. Jangan tentukan127.0.0.1ataulocalhostsebagai alamat IP.Nomor port tempat server WebSocket mendengarkan adalah bilangan bulat antara 0 hingga 65.535. Dalam banyak kasus, nomor port lebih besar dari 1.024. Tetapkan parameter
portke nilai yang ditentukan untuk fungsi Anda. Secara default, nilainya adalah9000.
Gambar berikut menunjukkan struktur direktori WebIDE.

Di terminal WebIDE, jalankan perintah
npm install wsuntuk menginstal dependensi. Untuk informasi tentang cara menginstal dependensi dalam waktu proses Python, lihat Gunakan Konsol Function Compute untuk menginstal dependensi.Setelah dependensi diinstal, file package-lock.json dibuat secara otomatis. Gambar berikut menunjukkan struktur direktori.

Klik Deploy untuk menerapkan kode ke Function Compute.
Langkah 3: Uji fungsi
Pada halaman detail fungsi, klik tab Triggers untuk melihat dan menyalin titik akhir publik pemicu.
CatatanSetelah pemicu HTTP dibuat, titik akhir publik tetap tidak berubah.
Gunakan Postman untuk menguji fungsi. Untuk informasi lebih lanjut, lihat Postman.
Buat permintaan WebSocket di Postman.
Salin titik akhir publik ke Postman dan ubah nilai parameter Skema dari HTTPS menjadi WebSocket Secure (WSS).
Konfigurasikan Params dan Headers sesuai dengan kebutuhan bisnis Anda.
Sambungkan ke WebSocket. Setelah koneksi terbentuk, Anda dapat mengirim pesan.
Masukkan pesan yang ingin Anda kirim dan periksa apakah fungsi menerima pesan tersebut.
Setelah periode timeout eksekusi berakhir, koneksi ke WebSocket diputus.
Gambar berikut menunjukkan proses pengujian.

(Opsional) Jika FCCommonError terjadi saat menggunakan Postman untuk menguji pemicu HTTP, periksa metode autentikasi pemicu HTTP. Jika Anda tidak perlu mengautentikasi akses, atur Metode Autentikasi pemicu HTTP ke No Authentication sebelum melakukan pengujian.

Informasi lebih lanjut
Request timeout
Function Compute tidak membedakan antara permintaan WebSocket dan permintaan HTTP dalam hal periode timeout eksekusi. Jika koneksi WebSocket berlangsung lebih lama daripada periode timeout yang ditentukan, koneksi WebSocket diputus secara paksa dan klien menerima kode status 1006.
Keep-alive mode and reconnection upon timeout
Setelah koneksi WebSocket terbentuk, koneksi tetap aktif kecuali durasi koneksi melebihi periode timeout yang ditentukan, dan Function Compute tidak mengganggu logika yang ada. Jika tidak ada data yang ditransmisikan dalam periode tertentu saat koneksi WebSocket aktif, koneksi mungkin dinonaktifkan oleh node perantara, seperti gateway NAT yang memetakan alamat IP internal klien ke alamat IP publik, dan konfigurasi rute. Dalam hal ini, periode timeout koneksi tidak tetap. Jika tidak ada data yang ditransmisikan dalam periode timeout, gateway NAT dapat memutus koneksi WebSocket. Anda mungkin perlu menjaga koneksi tetap aktif atau memeriksa apakah koneksi WebSocket tersedia dengan menggunakan frame ping dan pong yang disediakan oleh protokol WebSocket.
Jika Anda memerlukan periode timeout yang lebih lama yang melebihi periode timeout maksimum yang disediakan oleh Function Compute atau Anda ingin mempertahankan logika stabil untuk menjalankan aplikasi, tambahkan mekanisme re-koneksi dalam kode klien untuk menangani timeout. Anda dapat mengimplementasikan mekanisme tersebut dengan menggunakan pustaka Reconnecting-WebSocket atau pustaka SocketIO.
Session affinity
Function Compute tidak memiliki status. Saat fungsi menerima banyak permintaan konkuren pada saat yang sama, Function Compute tidak dapat menjamin bahwa permintaan dari klien yang sama diproses oleh kontainer yang sama. Anda mungkin perlu menggunakan layanan penyimpanan eksternal, seperti Redis, Memcached, Apache Kafka, dan database, untuk mempertahankan status permintaan WebSocket di antara beberapa instance kontainer.
Sebagai contoh, untuk aplikasi ruang obrolan, Function Compute tidak dapat menjamin bahwa semua pengguna terhubung ke instance fungsi yang sama pada saat yang sama. Dalam hal ini, fitur Pub/Sub Redis dapat digunakan untuk mengonfigurasi aplikasi ruang obrolan. Saat pengguna bergabung dengan ruang obrolan, mereka berlangganan (Sub) ke saluran tempat ruang obrolan tersebut berada. Saat Pengguna 1 mengirim pesan ke fungsi, fungsi tersebut mempublikasikan (Pub) pesan ke saluran tempat ruang obrolan tersebut berada di Redis. Dengan cara ini, semua pengguna di ruang obrolan dapat menerima pesan tersebut.
Metode penagihan
Metode penagihan untuk permintaan WebSocket dan permintaan HTTP sama. Permintaan WebSocket dapat dianggap sebagai permintaan HTTP dengan waktu koneksi yang lebih lama. Untuk informasi lebih lanjut tentang penagihan, lihat Ikhtisar Penagihan.
Untuk fungsi yang konkurensi instansinya adalah 1, penagihan dimulai saat koneksi WebSocket dibentuk dan berakhir saat koneksi WebSocket diputus.
Untuk fungsi yang konkurensi instansinya lebih besar dari 1, penagihan dimulai saat koneksi WebSocket pertama dibentuk dan berakhir saat koneksi WebSocket terakhir diputus. Jika beberapa koneksi ada dalam periode waktu tertentu, sistem hanya mengenakan biaya sekali.
Pada gambar berikut, konkurensi instansi fungsi adalah 2. Permintaan pertama tiba pada T1 dan berakhir pada T3. Permintaan kedua tiba pada T2 dan berakhir pada T4. Penagihan dimulai dari T1 dan berakhir pada T4. Dari T2 hingga T3, biaya hanya dikenakan sekali.

Contoh
Waktu proses kustom | Waktu proses Kontainer Kustom |
FAQ
Informasi tambahan
WebSocket memiliki batasan pada waktu proses, periode timeout, dan transmisi data. Untuk informasi lebih lanjut, lihat Batasan pada WebSocket.
Pemicu HTTP mendukung pemanggilan sinkron dan asinkron. Untuk informasi lebih lanjut, lihat Metode pemanggilan.
Function Compute memungkinkan Anda untuk memanggil fungsi HTTP lintas asal. Untuk informasi tentang cara memproses permintaan Berbagi Sumber Daya Lintas Domain (CORS), lihat Pemrosesan permintaan CORS.