Pustaka websocket mana yang digunakan dengan Node.js? [Tutup]

429

Saat ini ada banyak perpustakaan websocket untuk node.js, yang paling populer adalah:

Namun saya tidak dapat menemukan perbandingan konkret yang solid di antara mereka ... Rupanya Socket.io mengagumkan, tetapi telah menjadi cukup tanggal dan telah gagal membangun. Baik ws dan websocket-node mengklaim mereka yang tercepat. Dan engine.io tampaknya baru, tetapi jauh lebih berat daripada yang lebih ringan.

Akan luar biasa jika kita atau seseorang dapat menyusun jawaban yang berfungsi sebagai panduan tentang perpustakaan soket yang digunakan dan kapan, serta perbandingan di antara mereka.

balupton
sumber
246
Jika ini ditutup, kemana perginya pertanyaan seperti ini? Karena jawabannya akan sangat berguna ... Sepertinya disayangkan bahwa pertanyaan yang menonjol tidak seharusnya ada di sini.
balupton
14
Woot woot untuk komunitas wiki, yang berarti bahwa meskipun ada pertanyaan yang ditutup dari jawaban baru, kami masih dapat meningkatkan jawaban komunitas wiki di bawah ini :)
balupton
14
Saya setuju, saya ingin melihat pertanyaan semacam ini tidak hanya diizinkan, tetapi juga dianjurkan. OKE, mereka mungkin tidak relevan dalam waktu bertahun-tahun, tetapi sampai saat itu mereka akan menyelamatkan dunia.
John Little
1
@balupton dapatkah Anda memperbarui komunitas dengan pilihan Anda dan jika Anda senang dengan itu? apakah itu socket.io?
Grafik C
3
@ Graphics Saya menggunakan Primus dengan ws hari ini, seperti yang saya butuhkan, jika saya butuh sesuatu yang lebih ekstrim, saya hanya menukar perpustakaan undering dan menyimpan api yang sama berkat Primus. Keajaiban bekerja.
balupton

Jawaban:

390

Dapatkan bola bergulir dengan jawaban wiki komunitas ini . Jangan ragu untuk mengedit saya dengan peningkatan Anda.

  • adalah server WebSocket dan klien untuk node.js. Salah satu perpustakaan tercepat jika bukan yang tercepat.

  • websocket-node WebSocket server dan klien untuk node.js

  • websocket-driver-node WebSocket server dan protokol klien parser node.js - digunakan dalam faye-websocket-node

  • faye-websocket-node WebSocket server dan klien untuk node.js - digunakan dalam faye dan sockjs

  • socket.io server WebSocket dan klien untuk node.js + klien untuk browser + (v0 memiliki fallback terbaru ke terlama, v1 dari Socket.io menggunakan engine.io) + saluran - digunakan dalam stack.io. Pustaka klien mencoba menyambung kembali setelah terputus.

  • sockjs WebSocket server dan klien untuk node.js dan lainnya + klien untuk browser + terbaru ke fallback tertua

  • faye WebSocket server dan klien untuk node.js dan lainnya + klien untuk browser + fallbacks + dukungan untuk bahasa sisi server lainnya

  • server realtime deepstream.io clusterable yang menangani koneksi WebSockets & TCP dan menyediakan sinkronisasi data, pub / sub dan permintaan / respons

  • socketcluster WebSocket server cluster yang menggunakan semua core CPU pada mesin Anda. Misalnya, jika Anda menggunakan instance Amazon EC2 xlarge dengan 32 core, Anda akan dapat menangani hampir 32 kali lalu lintas pada instance tunggal.

  • primus Menyediakan API umum untuk sebagian besar perpustakaan di atas untuk kemudahan switching + peningkatan stabilitas untuk semuanya.

Kapan harus menggunakan:

  • menggunakan server WebSocket dasar ketika Anda ingin menggunakan implementasi WebSocket asli di sisi klien, waspadai ketidakcocokan browser.

  • gunakan pustaka fallback saat Anda peduli dengan fallback browser

  • gunakan pustaka berfitur lengkap ketika Anda peduli tentang saluran

  • gunakan primus ketika Anda tidak tahu apa yang harus digunakan, tidak berminat untuk menulis ulang aplikasi Anda ketika Anda perlu beralih kerangka kerja karena mengubah persyaratan proyek atau membutuhkan stabilitas koneksi tambahan.

Tempat menguji:

Firecamp adalah lingkungan pengujian GUI untuk SocketIO, WS dan semua teknologi real-time utama. Debug acara real-time saat Anda sedang mengembangkannya.

balupton
sumber
10
Terima kasih atas jawaban terinci. Bisakah Anda jelaskan poin 3 kapan harus digunakan? Apa saluran yang dimaksud dengan titik? Saya baru mengenal websockets dan mencoba memahami yang mana yang akan digunakan dalam kasus saya.
Akshat Jiwan Sharma
2
Bagaimana dengan Autobahn / WAMP?
Emile Cormier
1
Daftar yang bagus dari semua opsi yang tersedia setelah kematian now.js
Rahul Prasad
@AkshatJiwanSharma: Saluran adalah 'kamar' yang disebut masing-masing pemain di sebuah ruangan dapat bertukar pesan ..
Marwen Trabelsi
4
Detail kecil untuk ws adalah membutuhkan python. Jadi, jika Anda menggunakan wadah buruh pelabuhan atau sesuatu, Anda harus memiliki python yang tersedia untuk digunakan ws.
AntouanK
40

Pembaruan: Jawaban ini sudah usang karena versi perpustakaan yang lebih baru yang disebutkan dirilis sejak saat itu.

Socket.IO v0.9 sudah ketinggalan zaman dan agak buggy, dan Engine.IO adalah penerus sementara. Socket.IO v1.0 (yang akan segera dirilis) akan menggunakan Engine.IO dan jauh lebih baik daripada v0.9. Saya akan merekomendasikan Anda untuk menggunakan Engine.IO sampai Socket.IO v1.0 dirilis.

"ws" tidak mendukung fallback, jadi jika browser klien tidak mendukung websockets, itu tidak akan berfungsi, tidak seperti Socket.IO dan Engine.IO yang menggunakan polling panjang dll jika websockets tidak tersedia. Namun, "ws" sepertinya perpustakaan tercepat saat ini.

Lihat artikel saya membandingkan Socket.IO, Engine.IO dan Primus: https://medium.com/p/b63bfca0539

Deniz Ozger
sumber
Ini mengingatkan saya pada Node.js 0.12 yang biasa langsung ... mereka juga mengklaim itu selama berbulan-bulan sekarang. Jadi, mungkin, kita harus menunggu dan melihat ...
Golo Roden
1
Apakah Anda memiliki wawasan / pengalaman dengan Autobahn / WAMP ( wamp.ws )?
Emile Cormier
6
Socket.IO merilis v1-nya. Engine.io bukan pengganti untuk itu, tetapi digunakan secara internal oleh Socket.IO sebagai protokol transport - ia mengabstraksi komunikasi aktual antara titik akhir (xhr, ws) dan memiliki format sederhana untuk paket. Socket.io menyediakan api yang lebih kaya yang 'terasa' seperti pemancar peristiwa melalui kabel.
hammett
29

npm ws adalah jawaban untuk saya. Saya menemukan itu kurang mengganggu dan lebih lurus ke depan. Dengan itu juga sepele untuk mencampurkan websockets dengan layanan lainnya. Kode sederhana bersama pada pos ini.

var WebSocketServer = require("ws").Server;
var http = require("http");
var express = require("express");
var port = process.env.PORT || 5000;

var app = express();
    app.use(express.static(__dirname+ "/../"));
    app.get('/someGetRequest', function(req, res, next) {
       console.log('receiving get request');
    });
    app.post('/somePostRequest', function(req, res, next) {
       console.log('receiving post request');
    });
    app.listen(80); //port 80 need to run as root

    console.log("app listening on %d ", 80);

var server = http.createServer(app);
    server.listen(port);

console.log("http server listening on %d", port);

var userId;
var wss = new WebSocketServer({server: server});
    wss.on("connection", function (ws) {

    console.info("websocket connection open");

    var timestamp = new Date().getTime();
    userId = timestamp;

    ws.send(JSON.stringify({msgType:"onOpenConnection", msg:{connectionId:timestamp}}));


    ws.on("message", function (data, flags) {
        console.log("websocket received a message");
        var clientMsg = data;

        ws.send(JSON.stringify({msg:{connectionId:userId}}));


    });

    ws.on("close", function () {
        console.log("websocket connection close");
    });
});
console.log("websocket server created");
MFAL
sumber
Bagaimana cara mendapatkan url permintaan dalam metod koneksi? wss.on ("koneksi", fungsi (ws) {// some code console.log (ws. ???) dapatkan url ...}
Opalosolo
tidak ada url permintaan seperti pada permintaan ajax. Perpustakaan javascript membuka koneksi ke server soket web Anda menggunakan alamat seperti 127.0.0.1:8080 atau apa pun.com:7777, dll .... Kedengarannya membingungkan, cobalah membaca beberapa tutorial sederhana tentang soket web.
MFAL
5
Sebenarnya titik akhir WebSocket memiliki url juga, mereka mulai dengan ws, seperti ws://myserver.com. Dan ya, mereka dapat dikonfigurasi untuk dilayani menggunakan 80 dan 443 port juga. Menggunakan proxy terbalik seperti nginx, Anda dapat merutekan WebSocketurl protokol ke port lain dari protokol HTTP normal.
Prahlad Yeri
Anda dapat mensimulasikan rute jika Anda menginginkannya.
Lucas Tettamanti
1
menggunakan express-wsmemungkinkan untuk menambahkan wsrute di aplikasi kilat.
Dmitry Masley