সকেট.ইও এবং ওয়েবসকেটের মধ্যে পার্থক্য


458

নোড.জেজে সকেট.ইও এবং ওয়েবসকেটের মধ্যে পার্থক্য কী?
তারা উভয় সার্ভার পুশ প্রযুক্তি? আমি কেবলমাত্র পার্থক্যগুলি অনুভব করেছি,

  1. सॉকেট.আইও আমাকে একটি ইভেন্টের নাম উল্লেখ করে বার্তা প্রেরণ / প্রেরণের অনুমতি দেয়।

  2. সকেট.আইওর ক্ষেত্রে সার্ভার থেকে একটি বার্তা সমস্ত ক্লায়েন্টের কাছে পৌঁছে যাবে তবে ওয়েবসকেটে একই জন্য আমি সমস্ত ক্লায়েন্টকে বার্তা প্রেরণের জন্য সমস্ত সংযোগের একটি অ্যারে রাখতে এবং লুপ করতে বাধ্য হয়েছিল।

এছাড়াও, আমি অবাক হয়েছি কেন ওয়েব ইন্সপেক্টররা (ক্রোম / ফায়ারব্যাগ / ফিডলারের মতো) সার্ভার থেকে এই বার্তাগুলি (সকেট.আইও / ওয়েবেসকেট থেকে) ধরতে পারছেন না?

দয়া করে এটি পরিষ্কার করুন।



1
@ ট্রাজের জন্য আপনার ফায়ারব্যাগ বা অন্য কিছুর দরকার নেই। ক্রোমের ডেভোলগুলি নেটওয়ার্ক ট্যাবটির নীচে ডাব্লুএস সংযোগগুলি দেখায়।

খুব এই পরীক্ষা করুন (না নিশ্চিত যদি এই হল সর্বশেষ) - educba.com/websocket-vs-socket-io
মনোহর রেড্ডি Poreddy

উত্তর:


325

এর সুবিধাগুলি হ'ল এটি #S তে বর্ণিত হিসাবে ওয়েবসকেটগুলির ব্যবহারকে সহজতর করে এবং সম্ভবত আরও গুরুত্বপূর্ণভাবে ওয়েবস্কট ব্রাউজার বা সার্ভারে সমর্থিত নয় এমন ইভেন্টে অন্য প্রোটোকলগুলিকে ব্যর্থ ওভার সরবরাহ করে। আমি ওয়েবসকেটগুলি সরাসরি এড়িয়ে চলব যদি না আপনি কী পরিবেশের সাথে তারা কাজ করে না এবং আপনি এই সীমাবদ্ধতার আশেপাশে কাজ করতে সক্ষম হন তবে আপনি তার সাথে খুব বেশি পরিচিত না হন।

এটি ওয়েবসকেট এবং সকেট.আইও উভয়ই ভাল পঠিত।

http://davidwalsh.name/websocket


63
সকেট.আইও ওয়েবসকেটগুলির শীর্ষে নির্মিত নয়, এটি উপলব্ধ হলে এটি কেবল এই প্রযুক্তিটি ব্যবহার করে।
মোকা

24
অর্থগত পার্থক্য এবং আমি উত্তরটির বাকি অংশে ব্যাখ্যা করেছিলাম, তবে আমি এর প্রতিফলন করার জন্য উত্তরটি আপডেট করেছি।
টিমোথি স্ট্রিম্পল

1
@ মোক, আপনার কথা থেকে আমি কি এই সিদ্ধান্তে পৌঁছাতে পারি যে নীচের বিবৃতিটি ভুল? সকেট.আইও আসলে ওয়েবসকেটগুলির চেয়ে বেশি স্তর a
পুলক কান্তি ভট্টাচার্য্য

3
@ পুলককান্তি ভট্টাচার্য আপনি দয়া করে কোন বক্তব্য উল্লেখ করতে পারবেন? সকেট.আইও ওয়েবস্কোকেটের ওপরে মাত্র এক স্তরের চেয়ে বেশি, এটিতে বিভিন্ন শব্দার্থবিজ্ঞান রয়েছে (নামের সাথে বার্তা চিহ্নিত করে), এবং বিভিন্ন প্রোটোকলে ব্যর্থতাও রয়েছে, পাশাপাশি হৃদস্পন্দনও রয়েছে। সার্ভারের পক্ষের ক্লায়েন্টগুলিতে আইডি এর আরও সংযুক্তি এবং আরও অনেক কিছু। সুতরাং এটি কেবল একটি মোড়ক নয়, এটি পুরো বৈশিষ্ট্যযুক্ত লাইব্রেরি। প্রকৃতপক্ষে এটি সাম্প্রতিক বছরগুলিতে ভাল সমর্থন করা যায় নি, সুতরাং আমি সকেজেএস ব্যবহার করার পরামর্শ দেব যা সকেট.আইওর চেয়ে ভাল এবং আরও রক্ষণাবেক্ষণের বিকল্প।
মোক

4
@মোকা এক মাস আগে আমি আপনার সাথে একমত হয়েছি। Socket.io 1.0 এখন বাইরে আছে এবং আপডেটগুলি পাচ্ছে।
টিমোথি স্ট্রিম্পল

536

ভ্রান্ত ধারনা

ওয়েবস্কট এবং সকেট সম্পর্কিত কয়েকটি সাধারণ ভুল ধারণা রয়েছে areআইও:

  1. প্রথম ভ্রান্ত ধারণাটি হ'ল ওয়েব সকেট ব্যবহারের চেয়ে সকেট.আইও ব্যবহার করা উল্লেখযোগ্যভাবে সহজ, যা মনে হয় না। নীচে উদাহরণ দেখুন।

  2. দ্বিতীয় ভ্রান্ত ধারণাটি হ'ল ব্রাউজারগুলিতে ওয়েবস্কট ব্যাপকভাবে সমর্থিত নয়। আরও তথ্যের জন্য নিচে দেখুন।

  3. তৃতীয় ভ্রান্ত ধারণাটি হ'ল সকেট.আইও পুরানো ব্রাউজারগুলিতে ফ্যালব্যাক হিসাবে সংযোগটি হ্রাস করে। এটি প্রকৃতপক্ষে ধরে নেয় যে ব্রাউজারটি পুরানো এবং সার্ভারের সাথে একটি এজেএক্স সংযোগ শুরু করে, যা পরে কিছু ট্র্যাফিক এক্সচেঞ্জ হওয়ার পরে ওয়েবস্কটকে সমর্থনকারী ব্রাউজারগুলিতে আপগ্রেড করা হয়। বিস্তারিত জানার জন্য নীচে দেখুন।

আমার পরীক্ষা

আমি ওয়েবস্কট এবং সকেটের মধ্যে পার্থক্য প্রদর্শনের জন্য একটি এনপিএম মডিউল লিখেছি I

এটি সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড কোডের একটি সাধারণ উদাহরণ - ক্লায়েন্ট ওয়েবস্কট বা সকেট.আইও ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করে এবং সার্ভারটি 1s ব্যবধানে তিনটি বার্তা প্রেরণ করে, যা ক্লায়েন্ট দ্বারা ডিওমে যুক্ত করা হয় are

সার্ভার-সাইড

এক্সপ্রেস.জেএস অ্যাপ্লিকেশনটিতে এটি করতে ওয়েবস্কট এবং সকেট ব্যবহার করার সার্ভার-সাইড উদাহরণের তুলনা করুন: আইওও:

ওয়েবসকেট সার্ভার

এক্সপ্রেস.জেএস ব্যবহার করে ওয়েবসকেট সার্ভারের উদাহরণ:

var path = require('path');
var app = require('express')();
var ws = require('express-ws')(app);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'ws.html'));
});
app.ws('/', (s, req) => {
  console.error('websocket connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.send('message from server', ()=>{}), 1000*t);
});
app.listen(3001, () => console.error('listening on http://localhost:3001/'));
console.error('websocket example');

সূত্র: https://github.com/rsp/node-websocket-vs-sket.io/blob/master/ws.js

সকেট.আইও সার্ভার

এক্সপ্রেস.জেএস ব্যবহার করে সকেট.আইও সার্ভারের উদাহরণ:

var path = require('path');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'si.html'));
});
io.on('connection', s => {
  console.error('socket.io connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.emit('message', 'message from server'), 1000*t);
});
http.listen(3002, () => console.error('listening on http://localhost:3002/'));
console.error('socket.io example');

সূত্র: https://github.com/rsp/node-websocket-vs-sket.io/blob/master/si.js

মক্কেলের পক্ষে

ওয়েবসকেট এবং সকেট ব্যবহারের ক্লায়েন্ট-সাইড উদাহরণের সাথে তুলনা করুন I ব্রাউজারে এটি করার জন্য IO:

ওয়েবসকেট ক্লায়েন্ট

ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে ওয়েবসকেটের ক্লায়েন্টের উদাহরণ:

var l = document.getElementById('l');
var log = function (m) {
    var i = document.createElement('li');
    i.innerText = new Date().toISOString()+' '+m;
    l.appendChild(i);
}
log('opening websocket connection');
var s = new WebSocket('ws://'+window.location.host+'/');
s.addEventListener('error', function (m) { log("error"); });
s.addEventListener('open', function (m) { log("websocket connection open"); });
s.addEventListener('message', function (m) { log(m.data); });

সূত্র: https://github.com/rsp/node-websocket-vs-sket.io/blob/master/ws.html

সকেট.আইও ক্লায়েন্ট

সকেট.আইও ক্লায়েন্ট উদাহরণ ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে:

var l = document.getElementById('l');
var log = function (m) {
    var i = document.createElement('li');
    i.innerText = new Date().toISOString()+' '+m;
    l.appendChild(i);
}
log('opening socket.io connection');
var s = io();
s.on('connect_error', function (m) { log("error"); });
s.on('connect', function (m) { log("socket.io connection open"); });
s.on('message', function (m) { log(m); });

সূত্র: https://github.com/rsp/node-websocket-vs-sket.io/blob/master/si.html

নেটওয়ার্ক ট্রাফিক

নেটওয়ার্ক ট্র্যাফিকের পার্থক্যটি দেখতে আপনি আমার পরীক্ষা চালাতে পারেন । আমি যে ফলাফল পেয়েছি তা এখানে:

ওয়েবসকেটের ফলাফল

2 টি অনুরোধ, 1.50 কেবি, 0.05 এস

এই 2 টি অনুরোধ থেকে:

  1. এইচটিএমএল পৃষ্ঠা
  2. ওয়েবস্কটে সংযোগ আপগ্রেড

(সংযোগ আপগ্রেড অনুরোধটি 101 স্যুইচিং প্রোটোকল প্রতিক্রিয়া সহ বিকাশকারী সরঞ্জামগুলিতে দৃশ্যমান))

সকেট.আইও ফলাফল

6 টি অনুরোধ, 181.56 কেবি, 0.25 এস

এই 6 টি অনুরোধ থেকে:

  1. এইচটিএমএল পৃষ্ঠা নিজেই
  2. সকেট.আইওর জাভাস্ক্রিপ্ট (১৮০ কিলোবাইট)
  3. প্রথম দীর্ঘ পোলিং এজেএক্স অনুরোধ
  4. দ্বিতীয় দীর্ঘ পোলিং এজেএক্স অনুরোধ
  5. তৃতীয় দীর্ঘ পোলিং এজেএক্স অনুরোধ
  6. ওয়েবস্কটে সংযোগ আপগ্রেড

স্ক্রীনশট

আমি লোকহোস্টে পেয়েছি ওয়েবস্কট ফলাফল:

ওয়েবসকেটের ফলাফল - ওয়েবসকেট-vs-sket.io মডিউল

সকেট.আইওর ফলাফল যা আমি লোকালহোস্টে পেয়েছি:

সকেট.আইওর ফলাফল - ওয়েবসকেট -ভিসকেট.ও মডিউল

নিজেকে যাচাই করো

দ্রুত শুরু:

# Install:
npm i -g websocket-vs-socket.io
# Run the server:
websocket-vs-socket.io

ওপেন করে http: // স্থানীয় হোস্ট: 3001 / আপনার ব্রাউজারে সঙ্গে + Ctrl + Shift আমি খোলা ডেভেলপার টুলস, নেটওয়ার্ক ট্যাব খুলুন এবং WebSocket এর সংস্করণের জন্য নেটওয়ার্ক ট্রাফিক দেখতে সঙ্গে জন্য Ctrl + আর পৃষ্ঠাটি পুনরায় লোড।

ওপেন করে http: // স্থানীয় হোস্ট: 3002 / আপনার ব্রাউজারে সঙ্গে + Ctrl + Shift আমি খোলা ডেভেলপার টুলস, নেটওয়ার্ক ট্যাব খুলুন এবং Socket.IO সংস্করণের জন্য নেটওয়ার্ক ট্রাফিক দেখতে সঙ্গে জন্য Ctrl + আর পৃষ্ঠাটি পুনরায় লোড।

আনইনস্টল করতে:

# Uninstall:
npm rm -g websocket-vs-socket.io

ব্রাউজার সামঞ্জস্য

জুন ২০১ 2016 পর্যন্ত ওয়েবসকেট অপেরা মিনি ব্যতীত অন্য 9 টিরও বেশি IE সহ কাজ করে।

এটি আমি জুন ২০১ 2016- তে ব্যবহার করতে পারি ওয়েব- সকেটের ব্রাউজারের সামঞ্জস্যতা :

এখানে চিত্র বর্ণনা লিখুন

আপ-টু-ডেট তথ্যের জন্য http://caniuse.com/websocket দেখুন ।


23
সুতরাং মূলত আপনি যা বলছেন তা হ'ল, সকেট.ওয়ের চেয়ে ওয়েবসকেট ভাল?
জ্যাক মোসকোভি

42
@ জ্যাকমোস্কোভি আমি এটি বলব না যে ওয়েবস্কট অগত্যা আরও ভাল। এটি সমস্ত প্রয়োজনীয়তার উপর নির্ভর করে। ওয়েবসকেটের সুবিধাগুলি হ'ল এটি একটি ওয়েব স্ট্যান্ডার্ড (প্রথমে ডাব্লু 3 সি এর অধীনে এবং হোয়াটজিও, এখন আইইটিএফ এর অধীনে, 5 বছর আগে প্রকাশিত একটি আরএফসি), এটি খুব লাইটওয়েট কারণ এটি স্থানীয়ভাবে ব্রাউজারগুলি দ্বারা সমর্থিত, তবে ব্রাউজার সমর্থনটি ভাল থাকার সময় সর্বজনীন নয়। সকেট.আইও আরও ব্রাউজারগুলিকে সমর্থন করে এবং আরও কার্যকারিতা রয়েছে তবে কিছু ওভারহেডও আসে। কখনও কখনও একটি ভাল, কখনও কখনও অন্য। এটি ক্যোয়ারী নির্বাচনকারী এবং সমস্ত jQuery এর মধ্যে পছন্দ করার মতো - উত্তরটি সর্বদা এক রকম হয় না
RSS

20
দুর্দান্ত উত্তর এখানে !! এটি আমার কাছে মনে হয় সকেট.ওআইওর অনেক ক্ষেত্রে আর প্রয়োজন হয় না ... দেখুন এই দুর্দান্ত নিবন্ধটিও! मध्यम.com
আলভারো

4
@rsp আমি কি মনে করি না যে এই উদাহরণগুলি কার্যত সমান? সকেট-আইও বাধা দেওয়ার সাথে সাথে স্বয়ংক্রিয় পুনঃসংযোগের মতো জিনিসগুলি পরিচালনা করে (যা মোবাইল ডিভাইসে ঘটে) এবং আমার কাছে মনে হয় যে আপনার জন্য যেগুলি পরিচালিত হয় তার চারপাশে সুরক্ষা উদ্বেগ রয়েছে? আপনার সাধারণ ডাব্লুএস উদাহরণগুলি কার্যত সমতুল্য হলেও এই বৈশিষ্ট্যগুলি নেই।
mindplay.dk

28
খুব ভাল তুলনা। তবে এটি লক্ষণীয় যে সকেট.ইওর সাথে রুমের নামের ফাঁক, সংযোগের বিশদ বিবরণ, প্রচুর লগিংয়ের বিবরণ যুক্ত হয়েছে এবং অ্যাঙ্কুলার, ভ্যু, রিএ্যাক্ট এবং অন্যান্যদের সাথে সকেট.আইওর জন্য প্রচুর সংহত গ্রন্থাগার রয়েছে। সর্বাধিক গুরুত্বপূর্ণ, আপনি অ্যাজাক্স দীর্ঘ-পোলিং অক্ষম করতে এবং কোনও কাঁচা ওয়েবস্কট সংযোগের মতো সরাসরি ওয়েবস্কটের মাধ্যমে সংযুক্ত করতে পারেন। এইভাবে, আপনি সমান হিসাবে 180kb লাইব্রেরি ব্যতীত সমস্ত কিছুই পান। আপনার কেবলমাত্র সর্বনিম্ন প্রয়োজন না হলে সরাসরি ওয়েবস্কুট ব্যবহার করা বেদনাদায়ক। কক্ষগুলি হারাতে এবং সম্প্রদায় আইপিতে অ্যাক্সেস করা এন্টারপ্রাইজটির জন্য ভয়ঙ্কর।
নিক স্টিল

30

আমি সকেট.আইও ব্যবহার করার বিরুদ্ধে একটি যুক্তি সরবরাহ করতে যাচ্ছি।

আমি মনে করি সকেট.ইও ব্যবহার কেবলমাত্র কারণ এটির ফ্যালব্যাকগুলি একটি ভাল ধারণা নয়। আইই 8 রিপ করুন।

অতীতে এমন অনেকগুলি ঘটনা ঘটেছে যেখানে নোডজেএসের নতুন সংস্করণগুলি সকেট.আইও ভেঙেছে। আপনি উদাহরণগুলির জন্য এই তালিকাগুলি চেক করতে পারেন ... https://github.com/socketio/sket.io/issues?q=install+error

যদি আপনি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন বা আপনার বিদ্যমান অ্যাপ্লিকেশনটির সাথে কাজ করার দরকার এমন কিছু বিকাশ করতে যান তবে ডাব্লুএস এর সাথে এখনই কাজ করা ঠিক আছে, সকেট.ইও আপনাকে কিছুটা সমস্যা দিতে পারে ...

প্লাস নোড.জেএস এর জন্য ডাব্লুএস মডিউলটি ব্যবহার করা আশ্চর্যরকম সহজ।


তুমি কি পরামর্শ দিচ্ছেন আমরা MySQL সাথে যোগাযোগ করার জন্য ব্যবহার করেন -> express.js / fastify.js বা অ্যাপ্লিকেশানগুলি চ্যাট সরাসরি Node.js ... বিল্ড অ্যান্ড্রয়েড এবং আইওএস এ
DragonFire

25

সকেট.আইও ব্যবহার করা মূলত jQuery ব্যবহারের মতো - আপনি পুরানো ব্রাউজারগুলিকে সমর্থন করতে চান, আপনাকে কম কোড লিখতে হবে এবং পাঠাগারটি ফ্যালব্যাকগুলি সরবরাহ করবে। সকেট.ইও উপলব্ধ হলে ওয়েবসকেট প্রযুক্তি ব্যবহার করে এবং যদি না পাওয়া যায় তবে উপলব্ধ সেরা যোগাযোগের ধরণটি পরীক্ষা করে এটি ব্যবহার করে।


3

এমনকি যদি আধুনিক ব্রাউজারগুলি এখন ওয়েবসকেটকে সমর্থন করে তবে আমি মনে করি সকেটআইওকে ফেলে দেওয়ার দরকার নেই এবং আজকালকার যে কোনও প্রকল্পে এটির এখনও জায়গা রয়েছে। এটি বোঝা সহজ, এবং ব্যক্তিগতভাবে আমি জেনেছি যে কীভাবে ওয়েবসকেটস সকেটআইওকে ধন্যবাদ জানায়।

যেমন এই বিষয়টিতে বলা হয়েছে, অ্যাংুলার, রিএ্যাক্ট ইত্যাদির জন্য প্রচুর সংহত গ্রন্থাগার রয়েছে এবং টাইপস্ক্রিপ্ট এবং অন্যান্য প্রোগ্রামিং ভাষার জন্য সংজ্ঞা টাইপ রয়েছে।

আমি অন্য যে বিষয়টিকে সকেট.ইও এবং ওয়েবসকেটগুলির মধ্যে পার্থক্য যুক্ত করব তা হ'ল সকেট.ইওর সাথে ক্লাস্টারিং কোনও বড় বিষয় নয়। সকেট.ইও অ্যাডাপ্টার সরবরাহ করে যা এটিকে রেডিসের সাথে লিঙ্ক করতে স্কেলিবিলিটি বাড়াতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ আপনার কাছে আইরিডিস এবং সকেট.আইও-রেডিস রয়েছে

হ্যাঁ আমি জানি, সকেটক্লাস্টার বিদ্যমান, তবে এটি অফ-বিষয়।


2

সকেট.আইও ওয়েবস্কট ব্যবহার করে এবং যখন ওয়েবসকেট পাওয়া যায় না তখন রিয়েল টাইম সংযোগগুলি করতে ফ্যালব্যাক আলগো ব্যবহার করে।


0

https://sket.io/docs/#What-Sket-IO-is-not (আমার জোর দিয়ে )

কি সকেট.আইও না

Socket.IO হয় না একটি WebSocket বাস্তবায়ন। যদিও সকেট.আইও প্রকৃতপক্ষে সম্ভব হয় যখন ট্রান্সপোর্ট হিসাবে ওয়েবস্কট ব্যবহার করে তবে এটি প্রতিটি প্যাকেটে কিছু মেটাডেটা যুক্ত করে: প্যাকেটের ধরণ, নাম স্থান এবং প্যাকেট আইডি যখন কোনও বার্তার স্বীকৃতি প্রয়োজন হয়। এটা কেন একটি হল WebSocket এর ক্লায়েন্ট হবে না সফলভাবে একটি Socket.IO সার্ভারের সাথে সংযোগ করতে সক্ষম হতে , এবং একটি Socket.IO ক্লায়েন্ট হবে না একটি WebSocket এর সার্ভারের সাথে সংযোগ করতে সক্ষম হতে পারেন। এখানে প্রোটোকল স্পেসিফিকেশন দেখুন ।

// WARNING: the client will NOT be able to connect!
const client = io('ws://echo.websocket.org');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.