Node.js के साथ कौन सी वेबसोकेट लाइब्रेरी का उपयोग करना है? [बन्द है]


429

वर्तमान में नोड्स.जेएस के लिए वेबसोकेट पुस्तकालयों की अधिकता है , सबसे लोकप्रिय प्रतीत होता है:

हालाँकि मैं उनमें से किसी के बीच कोई ठोस ठोस तुलना नहीं कर सकता ... स्पष्ट रूप से सॉकेट.आईओ भयानक था, लेकिन काफी दिनांकित हो गया है और बिल्ड विफल हो रहा है। वेस और वेबसोकेट-नोड दोनों का दावा है कि वे सबसे तेज़ हैं। और engine.io नया लगता है, लेकिन लाइटर की तुलना में बहुत अधिक भारी है।

यह आश्चर्यजनक होगा कि अगर हम या कोई व्यक्ति एक उत्तर दे सकते हैं जो एक गाइड के रूप में काम करता है जिस पर सॉकेट लाइब्रेरी का उपयोग करना है और जब, साथ ही उनके बीच तुलना भी है।


246
यदि यह बंद हो जाता है, तो इस तरह का प्रश्न कहां जाना चाहिए? जैसा कि उत्तर अविश्वसनीय रूप से उपयोगी होगा ... दुर्भाग्यपूर्ण लगता है कि इस तरह के एक प्रमुख सवाल को यहां नहीं रहना चाहिए।
बालूप्टन


14
मैं सहमत हूं, मैं इस तरह के प्रश्न को न केवल देखना चाहता हूं, बल्कि प्रोत्साहित करना चाहता हूं। ठीक है, वे एक साल के समय में प्रासंगिक नहीं हो सकते हैं, लेकिन तब तक वे दुनिया को बचाएंगे।
जॉन लिटिल

1
@balupton क्या आप अपनी पसंद से समुदाय को अपडेट कर सकते हैं और यदि आप इससे खुश हैं? क्या यह सॉकेट है?
सी ग्राफिक्स

3
@ कैरिगिक्स मैं इन दिनों ws के साथ प्राइमस का उपयोग करता हूं, क्योंकि ws की मुझे बस जरूरत है, अगर मुझे कुछ और चरम की आवश्यकता है, तो मैं सिर्फ अंडरिंग लाइब्रेरी को स्वैप करता हूं और प्राइमस के लिए उसी एपीआई को धन्यवाद देता हूं। अद्भुत काम करता है।
बाल्टिक

जवाबों:


390

इस सामुदायिक विकि उत्तर के साथ गेंद को लुढ़कना । अपने सुधार के साथ मुझे संपादित करने के लिए स्वतंत्र महसूस करें ।

  • ws WebSocket सर्वर और node.js. के लिए ग्राहक सबसे तेज पुस्तकालयों में से एक यदि सबसे तेज नहीं है।

  • websocket-node WebSocket सर्वर और नोड के लिए क्लाइंट। js

  • websocket- ड्राइवर-नोड WebSocket सर्वर और क्लाइंट प्रोटोकॉल parser node.js - faye-websock-node में उपयोग किया जाता है

  • faye-websocket-नोड WebSocket सर्वर और node.js के लिए क्लाइंट - faye और socks में उपयोग किया जाता है

  • socket.io WebSocket सर्वर और ब्राउजर के लिए n.js + क्लाइंट के लिए क्लाइंट + (v0 में सबसे पुरानी कमियां हैं, Socket.io का v1 इंजन .io का उपयोग करता है) + चैनल - stack.io में उपयोग किया जाता है। ग्राहक पुस्तकालय वियोग पर पुन: कनेक्ट करने का प्रयास करता है।

  • sockjs WebSocket सर्वर और क्लाइंट के लिए n.js और अन्य + क्लाइंट ब्राउज़र के लिए + सबसे पुराने कमबैक के लिए नवीनतम

  • faye WebSocket सर्वर और क्लाइंट नोड के लिए। js और अन्य + क्लाइंट के लिए ब्राउज़र + फ़ॉलबैक + अन्य सर्वर साइड भाषाओं के लिए समर्थन

  • deepstream.io क्लस्टरिबल रियलटाइम सर्वर जो WebSockets और TCP कनेक्शन को हैंडल करता है और डेटा-सिंक, पब / सब और रिक्वेस्ट प्रतिक्रिया प्रदान करता है

  • सॉकेटक्लस्टर WebSocket सर्वर क्लस्टर जो आपके मशीन पर सभी CPU कोर का उपयोग करता है। उदाहरण के लिए, यदि आप 32 कोर के साथ xlarge Amazon EC2 इंस्टेंस का उपयोग करने वाले थे, तो आप एक बार में लगभग 32 बार ट्रैफ़िक संभाल सकेंगे।

  • प्राइमस उन सभी के लिए आसान स्विचिंग + स्थिरता में सुधार के लिए ऊपर के पुस्तकालयों के लिए एक सामान्य एपीआई प्रदान करता है।

कब इस्तेमाल करें:

  • जब आप क्लाइंट पर मूल WebSocket कार्यान्वयन का उपयोग करना चाहते हैं, तो ब्राउज़र की असंगति से सावधान रहें।

  • जब आप ब्राउज़र फ़ॉलबैक की परवाह करते हैं, तो फ़ॉलबैक लाइब्रेरी का उपयोग करें

  • जब आप चैनलों की परवाह करते हैं तो पूर्ण विशेषताओं वाली लाइब्रेरी का उपयोग करें

  • जब आप का उपयोग करने के बारे में कोई पता नहीं है, तो प्राइमस का उपयोग करें, अपने एप्लिकेशन को फिर से लिखने के मूड में नहीं हैं जब आपको प्रोजेक्ट आवश्यकताओं को बदलने या अतिरिक्त कनेक्शन स्थिरता की आवश्यकता के कारण चौखटे को स्विच करने की आवश्यकता होती है।

कहां परीक्षण करना है:

फायरकैम्प सॉकेटियो, डब्लूएस और सभी प्रमुख वास्तविक समय प्रौद्योगिकी के लिए एक जीयूआई परीक्षण वातावरण है। जब आप इसे विकसित कर रहे हों तब वास्तविक समय की घटनाओं को डीबग करें।


10
विस्तृत उत्तर के लिए धन्यवाद। आप का उपयोग करने के लिए जब आप बिंदु 3 समझा सकते हैं। वे कौन से चैनल हैं जिन पर बात की जा रही है? मैं वेबस्कैट के लिए नया हूं और यह समझने की कोशिश कर रहा हूं कि मेरे मामले में किसका उपयोग करना है।
अक्षत जीवन शर्मा

2
Autobahn / WAMP के बारे में क्या?
एमिल कॉर्मियर

1
अब की मृत्यु के बाद सभी उपलब्ध विकल्पों की अच्छी सूची। जेएस
राहुल प्रसाद

@ अक्षतजवानशर्मा: चैनल तथाकथित 'कमरे' हैं, एक कमरे में प्रत्येक खिलाड़ी संदेशों का आदान-प्रदान कर सकता है ..
मार्वेन ट्रैबलेसी

4
डब्ल्यूएस के लिए एक छोटा सा विवरण यह है कि इसे अजगर की जरूरत है। इसलिए यदि आप डॉकटर कंटेनर या कुछ पर तैनात हैं, तो आपको उपयोग करने के लिए अजगर उपलब्ध होना चाहिए ws
एंटौंक

40

अद्यतन: यह उत्तर पुराना है क्योंकि उल्लिखित पुस्तकालयों के नए संस्करण तब से जारी हैं।

Socket.IO v0.9 पुराना और थोड़ा बुग्याल है, और Engine.IO अंतरिम उत्तराधिकारी है। सॉकेट.आईओ v1.0 (जो जल्द ही जारी किया जाएगा) Engine.IO का उपयोग करेगा और v0.9 से बहुत बेहतर होगा। मैं आपको सॉकेट.IO v1.0 जारी होने तक Engine.IO का उपयोग करने की सलाह दूंगा।

"ws" फ़ॉलबैक का समर्थन नहीं करता है, इसलिए यदि क्लाइंट ब्राउज़र वेबसोकेट का समर्थन नहीं करता है, तो यह काम नहीं करेगा, सॉकेट.आईओ और इंजन के विपरीत। I हालांकि, "डब्ल्यूएस" इस समय सबसे तेज पुस्तकालय की तरह लगता है।

सॉर्ट.आई.ओ., इंजन.आईओ और प्राइमस की तुलना में मेरा लेख देखें: https://medium.com/p/b63bfca0539


यह मुझे सामान्य Node.js 0.12 की तत्काल याद दिलाता है ... वे यह भी दावा करते हैं कि अब महीनों के लिए। तो, शायद, हमें इंतजार करना होगा और देखना होगा ...
गोलो रोडेन

1
क्या आपके पास Autobahn / WAMP ( wamp.ws ) के साथ कोई अंतर्दृष्टि / अनुभव है ?
एमिल कॉर्मियर

6
सॉकेट.आईओ ने अपना v1 जारी किया। Engine.io इसके लिए एक प्रतिस्थापन नहीं है, लेकिन ट्रांसपोर्ट प्रोटोकॉल के रूप में सॉकेट द्वारा आंतरिक रूप से उपयोग किया जाता है - यह एंडपॉइंट्स (xhr, ws) के बीच वास्तविक संचार को सार करता है और पैकेट के लिए एक सरल प्रारूप है। सॉकेट.आईओ एक अमीर एपी को प्रदान करता है जो तार पर एक घटना उत्सर्जक की तरह 'महसूस' करता है।
हैमनेट

29

npm ws मेरे लिए जवाब था। मैंने इसे कम घुसपैठ और अधिक सीधे आगे पाया। इसके साथ बाकी सेवाओं के साथ वेबस्कैट को मिलाना भी मामूली था। इस पोस्ट पर सरल कोड साझा किया।

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");

कनेक्शन मेट्रो में अनुरोध url कैसे प्राप्त करें? wss.on ("कनेक्शन", फंक्शन (ws) {// कुछ कोड कंसोल.लॉग (ws। ???) get url ...}
ओपलोसोलो

अजाक्स अनुरोधों के रूप में कोई अनुरोध यूआरएल नहीं है। जावास्क्रिप्ट लाइब्रेरी आपके वेब-सॉकेट सर्वर से एक पते जैसे 127.0.0.1:8080 या any.com:7777, आदि का उपयोग करके एक कनेक्शन खोलती है। यह भ्रामक लगता है, वेब-सॉकेट्स पर कुछ सरल ट्यूटोरियल के माध्यम से जाने की कोशिश करता है।
एमएफएएल

5
वास्तव में WebSocket एंडपॉइंट्स में url भी है, वे wsइस तरह से शुरू करते हैं ws://myserver.com। और हां, उन्हें 80 और 443 पोर्ट का उपयोग करके भी कॉन्फ़िगर किया जा सकता है। नगीनक्स जैसे रिवर्स प्रॉक्सी का उपयोग करके, आप WebSocketसामान्य HTTP प्रोटोकॉल से प्रोटोकॉल यूआरएल को दूसरे पोर्ट पर रूट कर सकते हैं ।
प्रहलाद यारी

यदि आप चाहते हैं तो आप मार्गों का अनुकरण कर सकते हैं।
लुकास टेटामांति

1
का उपयोग कर express-wsजोड़ने की अनुमति देता wsएक्सप्रेस अनुप्रयोग में मार्गों।
दिमित्री मैस्ले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.