পারফরম্যান্সই কি কেবল traditionalতিহ্যবাহী REST এপিআই এর পরিবর্তে সিগন্যালআর (ওয়েবসকেট) পুরোপুরি ব্যবহার না করার একমাত্র কারণ?


42

আমি SignalRআমার বেশ কয়েকটি প্রকল্পে রিয়েল-টাইম মেসেজিং কার্যকারিতা অর্জন করতে ব্যবহার করেছি। এটি নির্ভরযোগ্যভাবে কাজ করছে বলে মনে হয় এবং এটি ব্যবহার শিখতে খুব সহজ।

অন্তত আমার জন্য প্রলোভনটি হ'ল একটি ওয়েব এপিআই পরিষেবা বিকাশ করা এবং SignalRসমস্ত কিছুর জন্য ব্যবহার করা।

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

সুতরাং, আমি জানতে চাই:

  1. পারফরম্যান্সের পাশাপাশি সমস্ত ওয়েব পরিষেবার পরিবর্তে সিগন্যালআর ব্যবহার না করার অন্য কোনও কারণ আছে কি?
  2. সিগন্যালআর-র সম্পাদনা কি যথেষ্ট তা নিয়ে যথেষ্ট বোঝায় না?

সার্ভার-সাইড অবজেক্ট এবং পরিষেবা সংজ্ঞা ক্লায়েন্ট-সাইড পরিষেবা অ্যাক্সেস কোডে কোনও নির্বোধ মতো কিছু না করে অনুবাদ করতে সক্ষম হওয়া আমার দীর্ঘদিনের স্বপ্ন node.js। উদাহরণস্বরূপ, যদি আমি একটি আকর্ষণীয় বস্তু সংজ্ঞায়িত InterestingObjectএবং একটি পরিষেবা CRUDবস্তুর InterestingObjectService, আমি সেবা করার জন্য একটি মানক URL রুট নির্ধারণ করতে পারেন - বলুন, "/ {SERVICENAME} / {methodName}" - কিন্তু আমি এখনও লিখতে ক্লায়েন্ট কোডে ব্যবহার করার দরকার সেবা. যেহেতু বস্তুর ক্লায়েন্ট থেকে সার্ভার এবং ফিরে পাশ করা যাচ্ছে, সেখানে কোন ব্যবহারিক কারণ নেই আছেক্লায়েন্ট-সাইড কোডে অবজেক্টটি স্পষ্টভাবে সংজ্ঞায়িত করতে, বা CRUD ক্রিয়াকলাপ সম্পাদন করার জন্য রুটগুলি স্পষ্টভাবে সংজ্ঞায়নের প্রয়োজন হবে না। আমি মনে করি যে এগুলি সমস্তকে মানিক করার কোনও উপায় থাকা উচিত যাতে এই ক্লায়েন্ট থেকে সার্ভারে অ্যাক্সেস অ্যাক্সেস কাজ করে এবং এই হিসাবে স্বচ্ছতার সাথে ফিরে আসে যে আমি যদি উইনফর্মস বা জাভা লিখছিলাম তবে এই ক্লায়েন্টটি লিখতে পারা যায় অ্যাপলেট বা নেটিভ অ্যাপ বা আপনার কী আছে।

Signতিহ্যবাহী ওয়েব পরিষেবার পরিবর্তে সিগন্যালআর যদি ব্যবহার করার পক্ষে যথেষ্ট ভাল হয় তবে এটি অর্জনের পক্ষে এটি একটি কার্যকর উপায় হতে পারে। আমি বর্ণিত পরিষেবার মতো হাবটিকে কাজ করার জন্য সিগন্যালআর ইতিমধ্যে কার্যকারিতা অন্তর্ভুক্ত করেছে, তাই আমি একটি সাধারণ বেস (সিআরইউডি) পরিষেবা সংজ্ঞায়িত করতে পারি যা এই সমস্ত কার্যকারিতা কিছুটা প্রতিফলন সহ অফার-অফ-বাক্সে সরবরাহ করবে। তারপরে আমি পরিষেবাটি অ্যাক্সেসের জন্য প্রায় গ্রহণ করতে পেরেছিলাম, কনভেনশন দ্বারা অ্যাক্সেস করতে পারে এমন কিছু অ্যাক্সেস করার জন্য আমাকে পুনরায় লেখার কোডের বিরক্তি বাঁচিয়েছিল - এবং আরও গুরুত্বপূর্ণ, এটি কীভাবে আপডেট হয় তা নির্ধারণ করার জন্য আমাকে লেখার কোডটি ব্যয় করতে হবে time ডোম

আমার সম্পাদনাটি পড়ার পরে আমার মনে হচ্ছে এটি কিছুটা অযৌক্তিক হতে পারে তাই দয়া করে আমার কাছে কী পাচ্ছি সে সম্পর্কে আপনার কোনও প্রশ্ন থাকলে বিনা দ্বিধায় আমাকে জিজ্ঞাসা করুন। মূলত, আমি চাই পরিষেবাটি অ্যাক্সেস যতটা সম্ভব স্বচ্ছ হোক to


5
যদি আপনার কাছে এমন একটি জাদুকরী নেটওয়ার্ক কার্ড থাকে যা অসীম সংখ্যক সকেট এবং একটি যাদুকরী নেটওয়ার্ক রাখতে পারে যা অসীম পরিমাণে ব্যান্ডউইথ এবং একটি জাদুকরী সার্ভারকে অসীম পরিমাণে মেমরি এবং সিপিইউ চক্র সমর্থন করতে পারে তবে কেবল ওয়েবসকেটই দুর্দান্ত পছন্দ!

Csla আপনি যা চান তা করেন, ব্যবসায়িক অবজেক্টগুলি ক্লায়েন্ট এবং সার্ভারের মধ্যে নিজেকে স্থানান্তর করতে পারে।
অ্যান্ডি

উত্তর:


50

এই দুটি প্রযুক্তির একটি খুব আলাদা উদ্দেশ্য রয়েছে।

  • REST হ'ল একটি API এ সাধারণ কলগুলির জন্য, ক্লায়েন্টটি এক্সচেঞ্জের সক্রিয় অভিনেতা হয়ে থাকে with যখন ক্লায়েন্টের কোনও ঠিকানার জিপিএস স্থানাঙ্কগুলি সন্ধান করার প্রয়োজন হয় তখন ক্লায়েন্টটি এপিআই-তে কল শুরু করে এবং স্থানাঙ্কগুলি না পাওয়া পর্যন্ত অপেক্ষা করে, বা কোনও ত্রুটি দেখা দেয় না বা সময়সীমা শেষ হয়ে যায়।

  • ওয়েব সকেটগুলি এমন সমস্ত কিছুর জন্য যা বিপরীতে কাজ করা প্রয়োজন। উদাহরণস্বরূপ, যখন আমি কোনও ইন্ট্রানেট ওয়েবসাইট ব্যবহার করি যা আমাকে লগ এবং বিভিন্ন সার্ভারের কার্যকারিতা দেখায়, ক্লায়েন্টটি প্যাসিভ হতে পারে এবং সার্ভার তাকে নতুন প্রকাশিত লগ বার্তা বা পারফরম্যান্স মেট্রিক না পাঠানো পর্যন্ত অপেক্ষা করতে পারে

পার্থক্যটি স্পষ্ট: প্রথম ক্ষেত্রে, ক্লায়েন্ট সিদ্ধান্ত নেয় যখন কোনও নির্দিষ্ট টুকরো তথ্যের প্রয়োজন হয়; দ্বিতীয় ক্ষেত্রে, ক্লায়েন্ট কেবল যোগাযোগ করার জন্য অপেক্ষা করে, এবং কখন তা হবে তা নাও জানেন।

কোনও উপায়ে উভয়ই বিনিময়যোগ্য: আপনি যখন ওয়েব সকেটগুলির প্রয়োজন না হয় তখন প্রয়োগ করতে পারেন (যেমন ক্লায়েন্ট আরইএসটি কল করার পরিবর্তে ওয়েব সকেটের মাধ্যমে সার্ভারকে কল করবে) এবং আপনি বিকল্প হিসাবে পোলিং বা দীর্ঘ পোলিং ব্যবহার করতে পারেন ওয়েব সকেট (ওয়েব সকেট এত জনপ্রিয় না হওয়া অবধি বছরের পর বছর ধরে এটি সফলভাবে ব্যবহৃত হয়েছিল)।

তবে তাদের বিনিময়যোগ্যতাটি ব্যয় করে আসে:

  • আপনি যখন ওয়েব সকেটের পরিবর্তে পোলিং বা দীর্ঘ পোলিং ব্যবহার করেন, আপনি প্রায়শই ব্যান্ডউইথ নষ্ট করেন।

  • ওয়েব এপিআইয়ের মাধ্যমে যা করা যায় তা করতে আপনি যখন ওয়েব সকেট ব্যবহার করেন, তখন আপনি সমস্ত সক্রিয় ক্লায়েন্টের সমস্ত সংযোগ খোলা রাখেন, যা আপনি যা চান তা নাও হতে পারে। একটি ছোট ওয়েবসাইটের জন্য যেখানে আপনি একই সাথে সর্বাধিক 5 ক্লায়েন্ট থাকার আশা করছেন এটি কোনও সমস্যা নয়। অ্যামাজন এডাব্লুএস এর মতো পরিষেবার জন্য প্রযুক্তিগতভাবে সমাধান করা সহজ হবে না।

ওয়েব সকেটগুলি যখন আপনার প্রয়োজন হবে না তখন ব্যবহার করবেন না। কোনও ঠিকানার জিপিএস স্থানাঙ্ক পেতে, আমি ওয়েব সকেট সংযোগ খোলার, কল করা, উত্তরের জন্য অপেক্ষা করা এবং সংযোগটি বন্ধ করার কিছুই পাই না: REST এই জাতীয় পরিস্থিতিতে আমার প্রয়োজনীয়তা পূরণ করে।

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

  • যদি আপনি দেখতে পান যে আপনি ওয়েব সকেট সংযোগগুলি খোলেন, একটি একক কল করার জন্য সেগুলি ব্যবহার করুন, এবং তারপরে এটি বন্ধ করুন, বা যদি আপনার সংযোগগুলি খোলা থাকে তবে সার্ভার ক্লায়েন্টকে কেবল ক্লায়েন্টের অনুরোধে কিছু প্রেরণ করছে, তবে REST এ স্যুইচ করুন।

এছাড়াও, ওয়েব সকেটগুলির এখনও একটি সীমিত সমর্থন রয়েছে এবং এটি কার্যকর করা সর্বদা সহজ নয়। সিগন্যালআর বাস্তবায়ন করা সহজ করার সময়, এর অর্থ এই নয় যে এটি অন্য ভাষা / প্রসঙ্গ / পরিবেশে এটি প্রয়োগ করতে আপনার কোনও অসুবিধা হবে না। REST সহ এটি সহজ: এটি curlপ্রতিটি মূলধারার ভাষায় কল বা অনুরূপ বৈশিষ্ট্য হতে পারে feature ওয়েব সকেটের সাহায্যে আপনি নিশ্চিত হয়ে উঠতে পারবেন না যে [আপনি এখনও জানেন না এমন একটি ভাষার নাম সন্নিবেশ করে] ক্লায়েন্ট তৈরি করতে কত সময় লাগবে।

আমি নেট, পাইথন এবং নোড.জেএস এর বেশ কয়েকটি প্রকল্পে ওয়েব সকেট ব্যবহার করেছি

  • নেট মধ্যে, এটি খুব কঠিন ছিল না, তবে এখনও, আমি এখনও কিছু ক্রিপ্টিক সমস্যাগুলি সনাক্ত করার চেষ্টা করতে কয়েক দিন অতিবাহিত করেছি, যেমন সংযোগটি খোলার সাথে সাথে এটি হ্রাস পেয়েছে। (এটি সিগন্যালআর আগে ছিল; আমি কখনই সিগন্যালআর চেষ্টা করিনি)। আমি ওয়েব সকেট মোডে ডাব্লুসিএফও ব্যবহার করেছি, যা কোনও সমস্যা ছাড়াই ছিল না (তবে আমি বিশ্বাস করি যে ডাব্লুসিএফ সর্বদা সমস্যা নিয়ে আসে)।

  • নোড.জেজে, এটি করণীয় ছিল, তবে আমি কাজ করে এমন একটি খুঁজে না পাওয়া পর্যন্ত আমাকে দু'বার গ্রন্থাগার স্যুইচ করতে হয়েছিল। আমি বিশ্বাস করি যে আমি একটি ওয়েব সকেট হ্যালো ওয়ার্ল্ড তৈরির চেষ্টা করে কমপক্ষে এক সপ্তাহ অতিবাহিত করেছি।

  • পাইথনে, আমি একবার চেষ্টা করেছিলাম, দুই বা তিন দিন কাটিয়েছি এবং ত্যাগ করেছি। এটা কখনও কাজ করে না।

এটির সাথে তুলনা করুন: নতুন ভাষা / কাঠামোর সাথে একমাত্র যে সমস্যার মুখোমুখি হতে পারে তা হ'ল ফাইলগুলি কীভাবে পোস্ট করা যায় বা খুব বড় বাইনারি প্রতিক্রিয়া পাওয়া যায় তা জানা। আমি মনে করি কিছু ভাষার সমাধান অনুসন্ধান করতে কয়েক ঘন্টা ব্যয় করেছি। তবুও, একটি বিশেষ মামলার জন্য কয়েক ঘন্টা কোনও সাধারণ হ্যালো ওয়ার্ল্ডের দিন বা সপ্তাহের তুলনায় কিছুই নয়।


2
আপনার উত্তরটিকে মেইনমা উচ্চারণ করেছে কারণ আমি এটি আকর্ষণীয় / সহায়ক বলে মনে করেছি। এখানে একটি বিষয় আছে যদিও আমি বুঝতে পারি না। আপনি উল্লেখ করেছেন যে অল্প সংখ্যক ক্লায়েন্ট ওয়েব সকেটগুলি পরিচালনা করতে ঠিক আছে (যেমন, একই সাথে সর্বাধিক 5 জন)) তারপরে আপনি উল্লেখ করেছেন স্ট্যাকওভারফ্লো তাদের হোমপেজে ওয়েব সকেট ব্যবহার করে। তারা কীভাবে এত বেশি সংখ্যক ব্যবহারকারীকে পরিচালনা করবেন? আমি জিজ্ঞাসা করছি কারণ আমি 20+ সিগন্যালআর সংযোগগুলি চেষ্টা করছি এবং পুরো জিনিসটি ক্র্যাশ হয়ে যাওয়ার আগে (প্রতিক্রিয়াবিহীন সবকিছু) ধীরে ধীরে আমি বার্তা দেরি করতে শুরু করি in
gnychis

1
@ জাইনিচিস: এর জন্য অনেকগুলি সমাধান রয়েছে তবে তাদের মধ্যে অনেকগুলিই অবকাঠামোগতই নিজের সাথে সম্পর্কিত (এটি সার্ভারফাল্ট ডটকমের জন্য)। সাধারণভাবে, ডোমেনগুলির মধ্যে আরও বেশি হার্ডওয়ার এবং বিভক্ত ব্যবহারকারীদের ফেলে দিন, যাতে কিছু সংযোগগুলি सॉকেট 1.example.com দ্বারা পরিচালনা করা হয়, অন্যরা সকেট 2.example.com, ইত্যাদি দ্বারা কার্যকর হয় তবে হার্ডওয়্যার এবং ব্যান্ডউইথের ক্ষেত্রেও বেশ ব্যয়বহুল।
আরসেনি মরজেনকো

3
এই উত্তরটি দুর্দান্ত, তবে আমি মূল প্রশ্নটি সংকীর্ণ করতে চাই। একটি অ্যাপ্লিকেশন যদি প্রয়োজন একটি ক্রমাগত WebSocket সংযোগ, তাহলে কেন সম্পূর্ণভাবে বিশ্রাম API- এর পরিবর্তে WebSockets ব্যবহার করবেন? যেহেতু একটি ওয়েবসকেট খোলা রয়েছে, সম্ভবত এটি সম্পূর্ণরূপে ব্যবহার করা উচিত।
শুভনোমাদ

আমি কেবল আমার নিজের প্রশ্নের উত্তর পেয়েছি ।
শুভনোমাদ

1

শুধু আমার 2 সেন্ট ...

আমি মনে করি এটি কার্য সম্পাদন বা যা কিছু সম্পর্কে নয়। এটা মান সম্পর্কে। REST একটি মানক এবং আইএমএইচওর নিম্নলিখিত সুবিধা রয়েছে:

  • HTTP অনুরোধগুলি ব্যবহার করার জন্য সহজ। প্রত্যেকেই দ্রুত আরএসটি এপিআই ব্যবহার করতে পারে। হেক, আপনি এমনকি ব্রাউজারটি খুলতে পারেন এবং ডেটা দেখতে একটি URL টাইপ করতে পারেন, আপনি আরও ইন্টারেক্টিভ হতে পারেন?
  • (প্রায়) কোনও প্রোগ্রামিংয়ের ভাষা এটি ব্যবহার করতে পারে। এটি একরকম সার্বজনীন ইন্টারফেস। একটি বহিরাগত ভাষা থেকে সিগন্যালআরের সাথে ইন্টারফেস করা কম সুস্পষ্ট বলে মনে হয়।
  • এটিতে http://petstore.swagger.wordnik.com/ এর মতো দুর্দান্ত সরঞ্জামদান সমর্থন রয়েছে has
  • এটি ডিবাগ করার জন্য একটি দুর্দান্ত "ইন্টারফেস"। আপনি সরাসরি ব্রাউজারে ইনকামিং এবং আউটগোয়িং ম্যাসেজগুলি খুব সহজে পর্যবেক্ষণ করতে পারেন, ডেটা ইত্যাদি দেখতে পারেন ওয়েবসকেট এবং কাস্টম লাইব্রেরি সহ, এটি এতটা স্পষ্ট নয়, আপনাকে সমস্ত কিছু স্পষ্টভাবে লগ করতে হবে।

1
আপনি যখন REST এপিআইগুলি কিছুটা সহজবোধ্য এবং সম্ভবত আরও ভাল টুলিংয়ের বিষয়ে কিছু ভাল পয়েন্ট তৈরি করেন, এই উত্তরটি এমন কয়েকটি জিনিস বলে যা কেবল সত্য নয়। আরআরএসটি স্ট্যান্ডার্ড নয় , যেখানে ওয়েবসকেট রয়েছে
স্ট্রিপলিং ওয়ারিয়র

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

ভাল ব্যাখ্যা। এবং, বিটিডব্লিউ, ক্রোম অন্তত আপনাকে তার ডিভাইসগুলিতে ওয়েবসকেট ট্র্যাফিক দেখতে দেয়। আমি অন্যান্য ব্রাউজার সম্ভবত সম্ভবত এটি কল্পনা।
স্ট্রিপলিং ওয়ারিয়র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.