مشاركة المتغيرات بين العاملين على شبكة الإنترنت؟[المتغيرات العالمية؟]

StackOverflow https://stackoverflow.com/questions/2262681

سؤال

هل هناك أي طريقة بالنسبة لي لمشاركة متغير بين اثنين من العاملين على الويب؟(عمال الويب هم في الأساس سلاسل رسائل في Javascript)

في لغات مثل c# لديك:

public static string message = "";
static void Main()
{
 message = "asdf";
 new Thread(mythread).Run();
}
public static void mythread()
{
 Console.WriteLine(message); //outputs "asdf"
}

أعلم أن هذا مثال سيء، ولكن في تطبيق Javascript الخاص بي، لدي مؤشر ترابط يقوم بعمليات حسابية ثقيلة يمكن نشرها عبر سلاسل رسائل متعددة [نظرًا لأن لدي جزءًا كبيرًا من البيانات في شكل مصفوفة.جميع عناصر المصفوفة مستقلة عن بعضها البعض.بمعنى آخر، لا يجب أن تهتم سلاسل العمل الخاصة بي بالقفل أو أي شيء من هذا القبيل]

لقد وجدت أن الطريقة الوحيدة "لمشاركة" متغير بين خيطين هي إنشاء Getter/setter [عبر النماذج الأولية] ثم استخدام postMessage/onmessage...على الرغم من أن هذا يبدو غير فعال حقًا [خاصة مع الكائنات، التي يجب أن أستخدمها JSON لـ AFAIK]

لقد تم إخراج LocalStorage/Database من مواصفات HTML5 لأنه قد يؤدي إلى طريق مسدود، لذلك هذا ليس خيارًا [للأسف]...

الاحتمال الآخر الذي وجدته هو استخدام PHP للحصول على صفحات getVariable.php وsetVariable.php، والتي تستخدم التخزين المحلي لتخزين ints/strings...مرة أخرى، يجب تحويل الكائنات [التي تتضمن صفائف/فارغة] إلى JSON...وبعد ذلك، JSON.parse()'d.

بقدر ما أعرف، يتم عزل سلاسل عمليات جافا سكريبت العاملة تمامًا عن سلسلة رسائل الصفحة الرئيسية [وهذا هو سبب عدم تمكن سلاسل عمليات جافا سكريبت العاملة من الوصول إلى عناصر DOM

على الرغم من أن postMessage يعمل، إلا أنه بطيء.

هل كانت مفيدة؟

المحلول

وشيء مشترك،

والعمال الويب عمدا - كل شيء في عامل مخفيا تماما عن غيرهم من العمال ومن الصفحات في المتصفح. إذا كان هناك أي وسيلة لتبادل القيم غير "نووية" بين العمال، فإن دلالات تلك القيم من المستحيل تقريبا للاستخدام مع النتائج المتوقعة. الآن، واحد <م> قد إدخال أقفال باعتبارها وسيلة لاستخدام هذه القيم، إلى حد ما - يمكنك الحصول على قفل، ودراسة، وربما تعديل قيمة، ثم تحرير القفل - ولكن أقفال وصعب جدا الاستخدام، ومنذ وضع الفشل المعتاد هو طريق مسدود أنك سوف تكون قادرة على "الطوب" المتصفح بسهولة جدا. هذا ليس جيدا للمطورين أو المستخدمين (<م> خاصة عندما تفكر في أن بيئة الإنترنت هي قابلة حتى للتجارب من قبل غير المبرمجين الذين لم يسبق حتى سمعت من المواضيع، والأقفال، أو رسالة عابرة)، لذلك البديل هو أي دولة مشتركة بين العمال أو الصفحات في المتصفح. يمكنك تمرير الرسائل (أي واحد يمكن ان يخطر على أنها تسلسل "عبر السلك" للعامل الذي يخلق ثم نسخته من القيمة الأصلية استنادا إلى المعلومات المتسلسلة) دون الحاجة إلى معالجة أي من هذه المشاكل.

وحقا، رسالة عابرة هو الطريق الصحيح إلى التوازي الدعم دون السماح للمشاكل التزامن الحصول خارج نطاق السيطرة تماما. تنسق handoffs الرسالة بشكل صحيح ويجب أن يكون كل شيء كما الكثير من القوة كما لو كنت تستطيع أن تشارك الدولة. كنت حقا لا تريد بديلا كنت تعتقد أنك تريد.

نصائح أخرى

لا، ولكن يمكنك إرسال رسائل للعمال على شبكة الإنترنت التي يمكن أن تكون المصفوفات، والأشياء والأرقام والسلاسل، والقيم المنطقية، وImageData أو أي مزيج من هذه. يمكن للعمال شبكة الإنترنت إرسال الرسائل مرة أخرى أيضا.

هناك خياران لمشاركة البيانات بين العاملين المتفانين:

1. العمال المشتركون

تمثل واجهة SquareWorker نوعًا محددًا من العمال يمكن الوصول إليه من عدة سياقات للتصفح ، مثل العديد من النوافذ أو الإطارات المعيارية أو حتى العمال.

إنتاج عامل مشترك في عامل مخصص

2. واجهة برمجة تطبيقات مراسلة القناة

تتيح واجهة برمجة تطبيقات MANDAY MANDAGATE اثنين من البرامج النصية المنفصلة التي تعمل في سياقات تصفح مختلفة متصلة بنفس الوثيقة (على سبيل المثال ، اثنين من الإحالة ، أو الوثيقة الرئيسية و IFRAME ، وثيقان عبر عمال مشترك ، أو عاملين) للتواصل مباشرة ، ويمرر رسائل بين واحدة أخرى من خلال قنوات ثنائية الاتجاه (أو الأنابيب) مع منفذ في كل نهاية.

كيفية الاتصال بالعامل المشترك من عامل الويب؟

ولقد قرأت مؤخرا عن (ولكن لم تستخدم)، <وأ href = "http://www.whatwg.org/specs/web-workers/current-work/#shared-workers-introduction" يختلط = "نوفولو noreferrer "> عمال المشتركة . ووفقا ل شارك في العمل! أوبرا يأتي مع دعم SharedWorker و الدعم فقط في أحدث المتصفحات (أوبرا 10.6، والكروم 5، سفاري 5).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top