একযোগে সুরক্ষিত থাকার জন্য কীভাবে কোনও বহু-ব্যবহারকারী এজাক্স ওয়েব অ্যাপ্লিকেশনটি ডিজাইন করবেন


95

আমার একটি ওয়েব পৃষ্ঠা রয়েছে যা সার্ভার থেকে প্রচুর পরিমাণে ডেটা দেখায়। যোগাযোগটি আজাক্সের মাধ্যমে করা হয়।

প্রতিবার ব্যবহারকারী এই ডেটা ইন্টার্যাক্ট করে এবং পরিবর্তন করে (ব্যবহারকারী বলুন একটি নাম পরিবর্তন করে) এটি সার্ভারকে ক্রিয়া করতে বলে এবং সার্ভারটি নতুন পরিবর্তিত ডেটা ফেরত দেয়।

যদি ব্যবহারকারী বি একই সময়ে পৃষ্ঠাটিতে অ্যাক্সেস করে এবং একটি নতুন ডেটা অবজেক্ট তৈরি করে তবে এটি আবার অজাক্সের মাধ্যমে সার্ভারকে জানাবে এবং ব্যবহারকারীর জন্য সার্ভারটি নতুন বস্তুর সাথে ফিরে আসবে।

এ এর পৃষ্ঠায় আমাদের একটি নাম পরিবর্তিত বস্তুর সাথে ডেটা রয়েছে। এবং বি এর পৃষ্ঠায় একটি নতুন অবজেক্ট সহ আমাদের ডেটা রয়েছে। সার্ভারে ডেটার একটি নতুন নাম করা বস্তু এবং একটি নতুন অবজেক্ট উভয়ই থাকে।

পৃষ্ঠার সার্ভারের সাথে সিঙ্কে রাখার জন্য আমার বিকল্পগুলি কী কী যখন একাধিক ব্যবহারকারী একযোগে ব্যবহার করে থাকেন?

পুরো পৃষ্ঠাকে লক করা বা প্রতিটি পরিবর্তনের জন্য ব্যবহারকারীর কাছে পুরো রাজ্যকে ডাম্প করার মতো বিকল্পগুলি এড়ানো এড়ানো যায়।

যদি এটি সহায়তা করে তবে এই নির্দিষ্ট উদাহরণে ওয়েবপৃষ্ঠাটি একটি স্ট্যাটিক ওয়েবমেডোথকে কল করে যা ডাটাবেসে একটি সঞ্চিত প্রক্রিয়া চালায়। সঞ্চিত পদ্ধতিটি যে কোনও ডেটা পরিবর্তিত হয়েছে এবং এর থেকে আর ফিরে আসবে না। স্ট্যাটিক ওয়েবমেডোড তার পরে ক্লায়েন্টের কাছে সঞ্চিত প্রক্রিয়াটি ফেরত পাঠায়।

অনুগ্রহ সম্পাদনা:

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

অর্থাৎ কার্যকারিতা এবং ডেটাবেসে ডেটা বা ডেটা বা রাষ্ট্রের দুর্নীতির কোনও ঝুঁকি ছাড়াই একযোগে অ্যাক্সেস


নিশ্চিত নয় তবে আপনার ফেসবুকের মতো পৃষ্ঠা থাকতে পারে যেখানে ব্রাউজার অজেক্স অনুরোধটি ক্রমাগত সার্ভার ডাটাবেসে পরিবর্তনগুলি ব্রাউজারে আপডেট করার জন্য প্রেরণ করে
সন্তোষ লিংখা

ক্লায়েন্টের রাজ্য সিরিয়ালাইজ করা এবং তারপরে এখানে অজ্যাক্সের মাধ্যমে সার্ভারকে বলা আমার রাষ্ট্রটি যা আমাকে আপডেট করার দরকার তা হল একটি বিকল্প। তবে ক্লায়েন্টকে কোনও স্থানে যে কোনও এবং প্রতিটি বিট তথ্য আপডেট করার পদ্ধতি জানতে হবে।
রায়নোস

4
ব্যবহারকারীর সমাপ্তির সমঝোতার সেরা সমাধানটি কি কেবল ধাক্কার বৈকল্পিকগুলির মধ্যে একটি নয়? WebSockets, ধূমকেতু ইত্যাদি
ডেভিন

@ ডেভিন এটি বেশ ভাল হতে পারে। তবে আমি ধূমকেতুর সাথে পরিচিত নই এবং ক্রস ব্রাউজার সমর্থনের জন্য ওয়েবসকেট নেই।
রায়নস

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

উত্তর:


157

ওভারভিউ:

  • ভূমিকা
  • সার্ভার আর্কিটেকচার
  • ক্লায়েন্ট আর্কিটেকচার
  • আপডেট কেস
  • প্রতিশ্রুতিবদ্ধ মামলা
  • বিবাদ মামলা
  • পারফরম্যান্স এবং স্কেলাবিলিটি

হাই রায়নস,

আমি এখানে কোনও নির্দিষ্ট পণ্য নিয়ে আলোচনা করব না। অন্যরা যা উল্লেখ করেছে তা হ'ল ইতিমধ্যে দেখার জন্য একটি ভাল টুলসেট (সম্ভবত সেই তালিকায় node.js যুক্ত করুন)।

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

আমি যদি আপনার জুতোতে থাকি তবে আমি এই জাতীয় কিছু বিকাশ করতাম:

1. সার্ভার-সাইড:

  • একটি যুক্তিসঙ্গত স্তর নির্ধারণ করুন যেখানে আপনি "পারমাণবিক নিদর্শনগুলি" (পৃষ্ঠা? পৃষ্ঠায় অবজেক্টস? অবজেক্টের অভ্যন্তরের মান?) কল করবেন তা আপনি সংজ্ঞায়িত করবেন? এটি আপনার ওয়েবসার্ভার, ডাটাবেস এবং ক্যাশিং হার্ডওয়্যার, # ব্যবহারকারীর #, # অবজেক্টের ইত্যাদির উপর নির্ভর করবে।

  • প্রতিটি পরমাণু নিদর্শন জন্য:

    • অ্যাপ্লিকেশন-বিস্তৃত অনন্য-আইডি
    • একটি ইনক্রিমেন্টিং সংস্করণ-আইডি
    • লেখার অ্যাক্সেসের জন্য একটি লকিং মেকানিজম (সম্ভবত মুটেক্স)
    • একটি রিংবুফারের ভিতরে একটি ছোট ইতিহাস বা "চেঞ্জলগ" (ভাগ করা মেমরি তাদের জন্য ভাল কাজ করে)। একটি একক কী-মান জুটি কম প্রসারণযোগ্য হলেও খুব ভাল। দেখতে http://en.wikipedia.org/wiki/Circular_buffer
  • একটি সার্ভার বা সিউডো-সার্ভার উপাদান যা কোনও সংযুক্ত ব্যবহারকারীর দক্ষতার সাথে প্রাসঙ্গিক চেঞ্জলগগুলি সরবরাহ করতে সক্ষম । পর্যবেক্ষক-প্যাটার্ন এটির জন্য আপনার বন্ধু।

2. ক্লায়েন্ট-সাইড:

  • একটি জাভাস্ক্রিপ্ট ক্লায়েন্ট যা উপরে বলা সার্ভারটিতে দীর্ঘকাল ধরে এইচটিটিপি-সংযোগ রাখতে সক্ষম, বা লাইটওয়েট পোলিং ব্যবহার করে।

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

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

  • একটি জাভাস্ক্রিপ্ট দ্বন্দ্ব-সমাধানকারী যা মানুষের-যা-পরিবর্তন-সঠিক-সঠিক সিদ্ধান্তের অনুমতি দেয়। আপনি কেবল ব্যবহারকারীকে বলতে না চাইতে পারেন "কেউ আপনার চেয়ে দ্রুত ছিল I আমি আপনার পরিবর্তনটি মুছে ফেলেছি cry বরং প্রযুক্তিগত বিচ্ছিন্নতা বা আরও বেশি ব্যবহারকারী-বান্ধব সমাধানগুলি থেকে অনেকগুলি বিকল্প সম্ভব বলে মনে হচ্ছে।

তাহলে এটি কীভাবে রোল করবে ...

কেস 1: আপডেট করার জন্য ধরণের সিকোয়েন্স-ডায়াগ্রাম:

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

কেস ২: এখন প্রতিশ্রুতি দেওয়ার জন্য:

  • শিল্পী-প্রতিশ্রুতিবদ্ধ ব্যবহারকারী ইনপুট থেকে পছন্দসই নতুন মান জানেন এবং সার্ভারে একটি পরিবর্তন-অনুরোধ প্রেরণ করে
  • সার্ভারসাইড মুটেক্স অর্জিত হয়
  • সার্ভার "আরে, আমি সংস্করণ 123 সংস্করণ থেকে আর্টিক্ট এক্স এর রাজ্যটি জানি, আমাকে এটিকে foo pls এ সেট করতে দিন।"
  • আর্টিক্ট এক্সের সার্ভারসাইড সংস্করণ যদি 123 এর চেয়ে কম হয় (কম হতে পারে না) নতুন মান গৃহীত হয়, তবে 124 এর নতুন সংস্করণ আইডি উত্পন্ন হয়।
  • নতুন রাষ্ট্র-তথ্য "সংস্করণ 124 এ আপডেট হয়েছে" এবং optionচ্ছিকভাবে নতুন মান foo আর্টিক্ট এক্স এর রিংবফার (চেঞ্জলগ / ইতিহাস) এর শুরুতে রাখা হয়েছে
  • সার্ভারসাইড মুটেক্স প্রকাশিত হয়েছে
  • আর্টিফ্যাক্ট প্রতিবেদককে অনুরোধ করা নতুন আইডির সাথে প্রতিশ্রুতি-নিশ্চয়তা পেয়ে খুশি।
  • ইতিমধ্যে সার্ভারসাইড সার্ভার উপাদান সংযুক্ত ক্লায়েন্টগুলিতে রিংফারগুলি পোলিং / ঠেলাঠেলি করে। আর্টিক্ট এক্স এর বাফারটি পর্যবেক্ষণকারী সমস্ত ক্লায়েন্টরা তাদের স্বাভাবিক বিলম্বের মধ্যেই নতুন রাষ্ট্রের তথ্য এবং মান পাবে (কেস ১ দেখুন)

মামলা 3: বিরোধের জন্য:

  • আর্টিক্ট কমিটর ব্যবহারকারী ইনপুট থেকে পছন্দসই নতুন মান জানেন এবং সার্ভারে একটি পরিবর্তন-অনুরোধ প্রেরণ করে
  • ইতিমধ্যে অন্য ব্যবহারকারী একই শিল্পকলা সফলভাবে আপডেট করেছেন (কেস ২ দেখুন) তবে বিভিন্ন বিলম্বের কারণে এটি এখনও আমাদের অন্যান্য ব্যবহারকারীর কাছে অজানা।
  • সুতরাং একটি সার্ভারসাইড মিটেক্স অর্জিত হয় (বা "দ্রুত" ব্যবহারকারী তার পরিবর্তনের প্রতিশ্রুতি না দেওয়া পর্যন্ত অপেক্ষা করা হয়)
  • সার্ভার "আরে, আমি সংস্করণ 123 সংস্করণ থেকে আর্টিক্ট এক্স এর অবস্থা জানি, আমাকে এটিকে মান foo এ সেট করতে দিন।"
  • সার্ভার্সাইডে আর্টিক্ট এক্স এর সংস্করণটি এখন ইতিমধ্যে 124। অনুরোধকারী ক্লায়েন্টটি মূল্যটি ওভাররাইট করা হবে তা জানতে পারে না।
  • স্পষ্টতই সার্ভারকে পরিবর্তনের অনুরোধটি বাতিল করতে হবে (godশ্বর-হস্তক্ষেপ ওভাররাইট অগ্রাধিকারগুলিতে গণনা করা হচ্ছে না), মুটেক্সকে মুক্তি দেয় এবং ক্লায়েন্টকে সরাসরি নতুন সংস্করণ-আইডি এবং নতুন মান ফেরত পাঠাতে যথেষ্ট দয়াবান।
  • একটি প্রত্যাখ্যাত প্রতিশ্রুতিবদ্ধ অনুরোধ এবং এমন একটি মানটির সাথে মুখোমুখি হয়েছিল যা পরিবর্তন-অনুরোধকারী ব্যবহারকারী এখনও জানেনি, জাভাস্ক্রিপ্ট আর্টিক্ট প্রতিশ্রুতিবদ্ধ দ্বন্দ্ব সমাধানের বিষয়টি বোঝায় যা ব্যবহারকারীকে সমস্যাটি প্রদর্শন করে এবং ব্যাখ্যা করে।
  • স্মার্ট দ্বন্দ্ব-সমাধানকারী জেএস দ্বারা কিছু বিকল্পের সাথে উপস্থাপিত ব্যবহারকারীকে মান পরিবর্তন করার জন্য আরেকবার চেষ্টা করার অনুমতি দেওয়া হয়েছে।
  • ব্যবহারকারী একবার তার সঠিক মূল্য হিসাবে মানটি বেছে নিলে প্রক্রিয়াটি কেস 2 থেকে শুরু হবে (বা কেস 3 যদি আরও দ্রুত হয় তবে আবার)

পারফরম্যান্স এবং স্কেলাবিলিটি সম্পর্কিত কিছু শব্দ

এইচটিটিপি পোলিং বনাম এইচটিটিপি "পুশিং"

  • পোলিং অনুরোধ তৈরি করে, প্রতি সেকেন্ডে এক, সেকেন্ডে 5, আপনি যা গ্রহণযোগ্য বিলম্ব বলে বিবেচনা করুন। এটি যদি আপনার (অ্যাপাচি?) এবং (পিএইচপি?) কনফিগার না করে "লাইটওয়েট" স্টার্টার হওয়ার পক্ষে যথেষ্ট হয় তবে এটি আপনার অবকাঠামোর জন্য নিষ্ঠুর হতে পারে। সার্ভারসাইডে পোলিংয়ের অনুরোধটি অনুকূল করা বাঞ্ছনীয় যাতে এটি ভোটগ্রহণের ব্যবধানের দৈর্ঘ্যের চেয়ে অনেক কম সময়ের জন্য চলে। রানটাইমটিকে অর্ধেক ভাগে বিভক্ত করার অর্থ হতে পারে আপনার পুরো সিস্টেমের বোঝা 50% পর্যন্ত কমিয়ে দেওয়া,
  • এইচটিটিপি এর মাধ্যমে ধাক্কা দেওয়া (ধরে নেওয়া ওয়েবওয়ার্কাররা তাদের সমর্থন করার পক্ষে অনেক দূরে) আপনার প্রতিটি ব্যবহারকারীর জন্য সারাক্ষণ একটি অ্যাপাচি / লাইটথপিডি প্রক্রিয়া উপলব্ধ থাকতে হবে । এই প্রতিটি প্রক্রিয়া এবং আপনার সিস্টেমে মোট মেমরির জন্য সংরক্ষিত আবাসিক স্মৃতি আপনার মুখোমুখি হবে এমন একটি খুব নির্দিষ্ট স্কেলিং সীমা হবে। সংযোগের মেমরির পদচিহ্ন হ্রাস করা প্রয়োজনীয় হবে, পাশাপাশি এই প্রতিটিটির জন্য পরিমান ক্রমাগত সিপিইউ এবং I / O কাজ সীমাবদ্ধ করার জন্য (আপনি প্রচুর ঘুম / নিষ্ক্রিয় সময় চান)

ব্যাকএন্ড স্কেলিং

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

সামনের স্কেলিং

  • আপনি যদি ভোট দিচ্ছেন বা "পুশস" নিচ্ছেন তা নির্বিশেষে, এক ধাপে সমস্ত পর্যবেক্ষণকৃত নিদর্শনগুলির জন্য তথ্য পাওয়ার চেষ্টা করুন।

"সৃজনশীল" টুইটগুলি

  • যদি ক্লায়েন্টদের পোলিং হয় এবং অনেক ব্যবহারকারী একই শিল্পকর্মগুলি দেখার প্রবণতা দেখান, আপনি স্টাফিক ফাইল হিসাবে ar শিল্পকর্মগুলির ইতিহাস প্রকাশের চেষ্টা করতে পারেন, অ্যাপাচি এটি ক্যাশে রাখার অনুমতি দিয়েছিলেন, তবুও যখন শৈল্পিকাগুলি পরিবর্তিত হয় তখন এটি সার্ভারে সতেজ করে। এটি পিএইচপি / মেমকেচে কিছু অনুরোধের জন্য গেমের বাইরে নেয়। লাইটথপিডি স্থিতিশীল ফাইলগুলি পরিবেশন করার ক্ষেত্রে কার্যকরভাবে কার্যকর।
  • কোটেন্ডো ডট কমের মতো একটি সামগ্রী বিতরণ নেটওয়ার্ক ব্যবহার করুন সেখানে শিল্পকর্মের ইতিহাসের দিকে ধাক্কা দিতে। পুশ-লেটেন্সিটি আরও বড় হবে তবে স্কেলাবিলিটি একটি স্বপ্ন
  • একটি আসল সার্ভার (HTTP ব্যবহার না করে) লিখুন যা ব্যবহারকারীরা জাভা বা ফ্ল্যাশ (?) ব্যবহার করে সংযুক্ত হন। আপনাকে অনেকগুলি ব্যবহারকারীকে একটি সার্ভার-থ্রেডে পরিবেশন করতে হবে। খোলা সকেটগুলির মাধ্যমে সাইক্লিং করা, প্রয়োজনীয় কাজটি করা (বা ডেলিগেশন)। ফর্কিং প্রক্রিয়াগুলির মাধ্যমে বা আরও সার্ভার শুরু করার মাধ্যমে স্কেল করতে পারে। নিঃশব্দে যদিও বিশ্বব্যাপী অনন্য থাকতে হবে।
  • আর্টফ্যাক্ট-আইডি রেঞ্জগুলির সাহায্যে লোডের দৃশ্যের উপর নির্ভর করে আপনার ফ্রন্টএন্ড- এবং ব্যাকএন্ড-সার্ভারগুলি। এটি অবিরাম মেমরির আরও ভাল ব্যবহারের অনুমতি দেবে (কোনও ডেটাবেজে সমস্ত ডেটা নেই) এবং এটি মিউটেক্সিংকে স্কেল করা সম্ভব করে। আপনার জাভাস্ক্রিপ্ট একই সময়ে একাধিক সার্ভারের সাথে সংযোগ বজায় রাখতে হবে।

আমি আশা করি এটি আপনার নিজস্ব ধারণাগুলির জন্য একটি সূচনা হতে পারে। আমি নিশ্চিত যে আরও অনেক সম্ভাবনা রয়েছে। আমি এই পোস্টে যে কোনও সমালোচনা বা বর্ধনকে স্বাগত জানাতে চেয়ে বেশি, উইকি সক্ষম।

ক্রিস্টোফ স্ট্রেসেন


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

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

4
+500 আপনি এই একটিকে তুচ্ছ করে গেছেন। এটি একটি দুর্দান্ত উত্তর।
রায়নস

4
@ লাকমান এই উত্তরটি ফেব্রুয়ারী ২০১১ থেকে এসেছে Webs ওয়েবসকেটগুলি এখনও একটি অভিনবত্ব ছিল এবং কেবল আগস্টের কাছাকাছি সময়ে ক্রোমে বিনা পূর্বরূপে প্রকাশ করা হয়েছিল। ধূমকেতু এবং সকেট.আইও যদিও ভাল ছিল, আমি মনে করি এটি কেবল আরও পারফরম্যান্স পদ্ধতির জন্য একটি পরামর্শ ছিল।
রিকার্ডো তোমাসি

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

13

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি ভেবেছিলাম আমি কেবল চিম ইন করব।

ওটি (অপারেশনাল ট্রান্সফর্মস) আপনার একত্রে এবং সামঞ্জস্যপূর্ণ মাল্টি-ব্যবহারকারী সম্পাদনার জন্য প্রয়োজনীয়তার জন্য ভাল ফিট বলে মনে হচ্ছে। এটি গুগল ডক্সে ব্যবহৃত একটি কৌশল (এবং এটি গুগল ওয়েভেও ব্যবহৃত হয়েছিল):

অপারেশনাল ট্রান্সফর্মগুলি - শেয়ারজেএস ( http://sharejs.org/ ) ব্যবহার করার জন্য একটি জেএস-ভিত্তিক গ্রন্থাগার রয়েছে , যা গুগল ওয়েভ টিমের সদস্য দ্বারা রচিত।

এবং যদি আপনি চান তবে একটি সম্পূর্ণ এমভিসি ওয়েব-কাঠামো আছে - ডার্বিজেএস ( http://derbyjs.com/ ) শেয়ারজেএস-এ নির্মিত যা এটি আপনার জন্য সমস্ত কিছু করে।

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


5

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


এটি একটি দরকারী পয়েন্ট। এটি ডিজাইন পয়েন্ট থেকে আমাদের ডাটাবেসে "সর্বশেষ সম্পাদিত" ক্ষেত্রগুলি আরও বুঝতে সহায়তা করে।
রায়নস

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

পরিবর্তিত স্ট্যাম্পগুলি আমাদের নিকটবর্তী "বর্তমান" ডেটা হ্যাশ করে এবং অন্যদিকে একটি হ্যাশের সাথে তুলনা করে অনেক সুন্দর।
রায়নস

4
মনে রাখবেন যে অসঙ্গতি এড়াতে ক্লায়েন্ট এবং সার্ভারের অবশ্যই একই সময়ে অ্যাক্সেস থাকতে হবে।
প্রার্থনাকারী

3

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

ভবিষ্যতে এটি করার সহজতর উপায় হবে যাকে ওয়েবসকেটস বলা হয় তবে এটি এখনও নিশ্চিত নয় যে মানকটি প্রাইম টাইমের জন্য প্রস্তুত হবে কেননা স্ট্যান্ডার্ডের বর্তমান অবস্থা সম্পর্কে সুরক্ষা উদ্বেগ রয়েছে।

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

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

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

এটি একইসাথে স্টাফ সম্পাদনা করা সহজ নয়, কারণ বিলম্বের কারণে ওয়েবে পারমাণবিক ক্রিয়াকলাপ করা সম্ভব নয়। হতে পারে এই নিবন্ধটি আপনাকে বিষয়টি সম্পর্কে আরও জানতে সহায়তা করবে।


2

এগুলি নিজেই লেখার চেষ্টা করা একটি বড় কাজ এবং এটি সঠিকভাবে পাওয়া খুব কঠিন। একটি বিকল্প হ'ল একটি ফ্রেমওয়ার্ক ব্যবহার করা যা ক্লায়েন্টদের ডেটাবেসের সাথে এবং এক সাথে একে অপরের সাথে রিয়েলটাইম ধরে রাখতে built

আমি খুঁজে পেয়েছি যে উল্কা কাঠামো এটি ভাল করে ( http://docs.meteor.com/#reactivity )।

"উল্কা প্রতিক্রিয়াশীল প্রোগ্রামিংয়ের ধারণাটি গ্রহণ করে This

"এই সাধারণ প্যাটার্নটির (প্রতিক্রিয়াশীল গণনা + প্রতিক্রিয়াশীল ডেটা উত্স) এর বিস্তৃত প্রয়োগযোগ্যতা রয়েছে mer প্রোগ্রামারটিকে সাবস্ক্রাইব / পুনরায় সদস্যতা কলগুলি লেখা থেকে সংরক্ষণ করা হয় এবং সঠিক সময়ে ডেকে আনা হয় তা নিশ্চিত করা, ডেটা প্রচার কোডের পুরো ক্লাসগুলি মুছে ফেলা হয় যা অন্যথায় আপনার আটকে থাকবে ত্রুটি-প্রবণ যুক্তিযুক্ত অ্যাপ্লিকেশন "


1

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

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

উল্কাটি যথেষ্ট সহজ যে আমি আপনাকে পরামর্শ দিতে চাই যে কমপক্ষে ধারণাগুলি চুরি করার জন্য এটি একবার দেখুন।


4
আমি নির্দিষ্ট ধরণের অ্যাপসের জন্য ডার্বি এবং মেটিয়রের ধারণাটি সত্যই পছন্দ করি document এছাড়াও, 80% সত্যিই সহজ করে তোলার দীর্ঘকালীন এমএস জগত থেকে এসেছি এবং অন্যান্য 20% এর জন্য খুব বেশি সময় ব্যয় করছি, আমি এই জাতীয় পিএফএম (খাঁটি চ ** কিং ম্যাজিক) সমাধানগুলি ব্যবহার করতে দ্বিধা বোধ করছি।
ট্র্যাকার 1

1

এই উইকিপিডিয়া পৃষ্ঠাগুলি একটি বার্তাপ্রেরণের ধরণে স্টেট ইভেন্ট ( ইডিএ ) বার্তাটি টেনে বা ধাক্কা দেয় এমন একটি এজাক্স ওয়েব অ্যাপ্লিকেশন ডিজাইনের জন্য একত্রীকরণ এবং সমবর্তী কম্পিউটারিং সম্পর্কে শিখার ক্ষেত্রে দৃষ্টিভঙ্গি যুক্ত করতে সহায়তা করতে পারে । মূলত, চ্যানেল সাবস্ক্রাইবারদের বার্তাগুলি প্রতিলিপি করা হয় যা ইভেন্টগুলি এবং সিঙ্ক্রোনাইজেশন অনুরোধগুলি পরিবর্তন করে।

সমসাময়িক ওয়েব-ভিত্তিক সহযোগী সফ্টওয়্যার এর অনেক ফর্ম রয়েছে ।

এর একটি নম্বর আছে HTTP- র etherpad-Lite জন্য API ক্লায়েন্ট লাইব্রেরী , একটি সহযোগীতা রিয়েল-টাইম সম্পাদক

জ্যাঙ্গো -রিয়েলটাইম-খেলার মাঠ জঙ্গোতে সকেট.ইওর মতো বিভিন্ন রিয়েল-টাইম প্রযুক্তি সহ রিয়েলটাইম চ্যাট অ্যাপ প্রয়োগ করে ।

অ্যাপেনজাইন এবং অ্যাপস্কেল উভয়ই অ্যাপজাইন চ্যানেল এপিআই প্রয়োগ করে ; যা গুগলড্রাইভ / রিয়েলটাইম-খেলার মাঠের মাধ্যমে প্রদর্শিত গুগল রিয়েলটাইম এপিআই থেকে পৃথক ।


0

সার্ভার-সাইড পুশ কৌশলগুলি এখানে যাওয়ার উপায়। ধূমকেতু একটি বাজে শব্দ (বা ছিল?)।

আপনার নেওয়া বিশেষ দিকটি আপনার সার্ভার স্ট্যাকের উপর নির্ভর করে এবং আপনি / এটি কতটা নমনীয়। আপনি যদি পারেন তবে আমি সকেট.আইওর দিকে একবার নজর দেব , যা ওয়েবসকেটগুলির ক্রস ব্রাউজার বাস্তবায়ন সরবরাহ করে, যা সার্ভারের সাথে দ্বিপাক্ষিক যোগাযোগের খুব সহজতর উপায় সরবরাহ করে, সার্ভারকে ক্লায়েন্টদের আপডেট আপডেট করতে দেয় updates

বিশেষত, গ্রন্থাগারের লেখক দ্বারা এই বিক্ষোভ দেখুন , যা আপনি বর্ণিত পরিস্থিতিটি প্রায় ঠিক দেখান।


কমিনিয়েশন নিয়ে সমস্যাগুলি হ্রাস করার জন্য এটি একটি দুর্দান্ত গ্রন্থাগার তবে আমি কীভাবে অ্যাপ্লিকেশন ডিজাইন করব সে সম্পর্কে উচ্চ স্তরের তথ্যের সন্ধান
করছিলাম

4
কেবল লক্ষণীয়, সকেট.ইও (এবং সিগন্যালআর) ফ্রেমওয়ার্ক যা প্রথম শ্রেণীর পছন্দ হিসাবে ওয়েবসকেট ব্যবহার করে তবে ধূমকেতু, দীর্ঘ পোলিং, ফ্ল্যাশ সকেট এবং চিরকালের জন্য ফ্রেমগুলির মতো অন্যান্য কৌশলগুলি ব্যবহার করার জন্য সামঞ্জস্যপূর্ণ ফলব্যাক রয়েছে।
ট্র্যাকার 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.