全部产品
Search
文档中心

Function Compute:Konfigurasikan pemicu HTTP untuk fungsi yang merespons permintaan WebSocket

更新时间:Jan 06, 2026

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

Buat layanan.

Langkah 1: Buat fungsi

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik Create Function.

  4. 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

  1. 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}`);
          }
        });
      })
    });
    Catatan
    • Alamat IP tempat server WebSocket mendengarkan adalah 0.0.0.0, yang mencakup semua port jaringan yang tersedia. Jangan tentukan 127.0.0.1 atau localhost sebagai 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 port ke nilai yang ditentukan untuk fungsi Anda. Secara default, nilainya adalah 9000.

    Gambar berikut menunjukkan struktur direktori WebIDE. directory1

  2. Di terminal WebIDE, jalankan perintah npm install ws untuk 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.dir2

  3. Klik Deploy untuk menerapkan kode ke Function Compute.

Langkah 3: Uji fungsi

  1. Pada halaman detail fungsi, klik tab Triggers untuk melihat dan menyalin titik akhir publik pemicu.

    image.png

    Catatan

    Setelah pemicu HTTP dibuat, titik akhir publik tetap tidak berubah.

  2. Gunakan Postman untuk menguji fungsi. Untuk informasi lebih lanjut, lihat Postman.

    1. Buat permintaan WebSocket di Postman.

      Salin titik akhir publik ke Postman dan ubah nilai parameter Skema dari HTTPS menjadi WebSocket Secure (WSS).

    2. Konfigurasikan Params dan Headers sesuai dengan kebutuhan bisnis Anda.

    3. Sambungkan ke WebSocket. Setelah koneksi terbentuk, Anda dapat mengirim pesan.

    4. Masukkan pesan yang ingin Anda kirim dan periksa apakah fungsi menerima pesan tersebut.

    5. Setelah periode timeout eksekusi berakhir, koneksi ke WebSocket diputus.

    Gambar berikut menunjukkan proses pengujian.

    image.png

    (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.

    image

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.websocket-billing

Contoh

Waktu proses kustom

Waktu proses Kontainer Kustom

Python

Python

Node.js

Node.js

Golang

Golang

FAQ

Mengapa saya tidak bisa mengeksekusi fungsi WebSocket?

  • Periode waktu yang diperlukan untuk memperbarui cache untuk pemicu baru adalah sekitar 10 detik. Tunggu beberapa detik dan coba lagi.

  • Periksa apakah dependensi dalam kode fungsi telah diinstal dengan benar. Untuk informasi lebih lanjut, lihat Instal dependensi pihak ketiga untuk fungsi.

  • Periksa apakah port dan alamat IP tempat fungsi mendengarkan sudah benar. Alamat IP tempat fungsi mendengarkan bisa 0.0.0.0 tetapi tidak boleh 127.0.0.1 atau localhost. Jika Anda tidak menentukan port mendengarkan kustom, port 9000 digunakan.

Pemecahan masalah

Sebelum jabat tangan WebSocket selesai, kesalahan berikut mungkin terjadi:

  • Kesalahan permintaan: Kesalahan permintaan terjadi saat permintaan yang tidak sesuai dengan kondisi tertentu dikirim. Jika kesalahan permintaan terjadi, kode status HTTP 4xx dikembalikan dalam respons.

  • Kesalahan fungsi: Kesalahan fungsi terjadi saat kode fungsi tidak valid. Jika kesalahan fungsi terjadi, kode status HTTP 5xx dikembalikan.

Tipe kesalahan

X-Fc-Error-Type

Kode status HTTP

Penyebab

Dapat Ditagih

Kesalahan permintaan

FcCommonError

400

Permintaan Anda melebihi batas permintaan. Untuk informasi lebih lanjut, lihat Ikhtisar.

Tidak

FcCommonError

400

Permintaan untuk fungsi yang memerlukan autentikasi identitas tidak berisi informasi tanggal atau otorisasi.

Tidak

FcCommonError

403

Tanda tangan permintaan untuk fungsi yang memerlukan autentikasi identitas tidak valid, yang menunjukkan bahwa informasi otorisasi tidak valid. Tanggal digunakan untuk menghitung tanda tangan, yang hanya valid selama 15 menit. Saat Anda menggunakan pemicu HTTP yang memerlukan autentikasi akses, tanda tangan menjadi tidak valid jika informasi tanggal dalam header permintaan lebih dari 15 menit dari waktu saat ini.

Tidak

FcCommonError

403

Permintaan Anda menggunakan metode permintaan yang tidak dikonfigurasikan dalam pemicu HTTP. Untuk fungsi WebSocket, pemicu HTTP harus mendukung metode GET. Kesalahan dilaporkan jika metode GET tidak dikonfigurasikan.

Tidak

FcCommonError

404

Permintaan WebSocket dikirim ke fungsi yang tidak memiliki pemicu HTTP yang dikonfigurasikan.

Tidak

Pembatasan lalu lintas pengguna

FcCommonError

429

Anda dapat mengurangi konkurensi atau menghubungi tim Function Compute untuk meningkatkan batas konkurensi.

Tidak

Kesalahan sistem terjadi.

FcCommonError

500

Kesalahan sistem terjadi di Function Compute. Coba lagi.

Tidak

Pembatasan lalu lintas sistem

FcCommonError

503

Kesalahan pembatasan sistem terjadi di Function Compute. Anda dapat mencoba kembali dalam mode backoff eksponensial.

Tidak

Kesalahan yang terjadi setelah jabat tangan WebSocket selesai disebabkan oleh kode fungsi. Anda dapat memeriksa kode Anda atau melihat log yang dihasilkan selama kode berjalan untuk pemecahan masalah. Untuk informasi lebih lanjut, lihat Lihat log pemanggilan fungsi.

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.