سؤال

لدي حاليًا نظام Ruby on Rails، وهناك خطط لنقله إلى GWT.قبل أن نفعل ذلك، ترغب السلطات في الحصول على إثبات للمفهوم من خلال كتابة جزء من الموقع بلغة GWT لإظهار أن GWT يمكنها استخدام المحتوى الحالي وعرضه.يكون تدفق البيانات في جزء GWT من النظام كما يلي:

  1. يرسل العميل استدعاء RPC إلى خادم GWT
  2. يتلقى الخادم استدعاء RPC، ثم يرسل طلب Ajax مكافئًا إلى نظام Rails
  3. يقوم الخادم بإنشاء كائن Java من نتيجة طلب Ajax، ويمرره مرة أخرى إلى العميل

المشكلة التي أواجهها الآن هي إدارة بيانات جلسة المستخدم عبر كلا النظامين.لدينا مثيل Tomcat واحد فقط، وله نوع الجلسات الخاص به، ثم يستخدم نظام Ruby الخاص بنا ActiveRecordStore لتخزين بيانات الجلسة في قاعدة البيانات.

المشكلة هنا هي أنه عندما يتحدث نظام Tomcat مع نظام Ruby، إذا قدم عميل GWT طلب تسجيل دخول، فإن آخر مستخدم قام بتسجيل الدخول من نظام GWT لديه جميع طلبات Ajax الصادرة التي يتم تنفيذها في نظام Rails كما لو كان نحن المستخدم الحالي نظرًا لأن نظام Tomcat يبدو كعميل واحد لـ Rails.

على أي حال، كيف يمكنني أن أجعل الأمر بحيث إذا بدأ المستخدم جلسة مع نظام Tomcat، فإن نظام Ruby سيكون على علم بذلك وسيكون لديه جلسة مكافئة بحيث على الرغم من أن خادم Tomcat هو عميل واحد له، فإن نظام Rails يدرك حقيقة أن العديد من المستخدمين المختلفين يتواصلون معه من خلال ذلك العميل الوحيد.

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

المحلول

أعتقد أن أفضل طريقة لحل هذه المشكلة هي استخدام ملفات تعريف الارتباط بدلاً من قاعدة البيانات لتخزين الجلسة.يدعم Rails هذا محليًا، وهو في الواقع مخزن ملفات تعريف الارتباط الافتراضي لبعض الوقت الآن.يتم توقيع ملف تعريف الارتباط نفسه بواسطة سر الخادم لمنع تلاعب المستخدم.أعتقد أن تطبيق Rails يستخدم تنظيم Ruby لتفريغ/تحميل البيانات، لذا قد تضطر إلى تنفيذها في Java، أو يمكنك تنفيذ مدير ملفات تعريف الارتباط الخاص بك على كلا الجانبين باستخدام نفس الفكرة.

من الممكن أيضًا استخدام رمز Ruby من JRuby في تطبيق Java الخاص بك.

نصائح أخرى

لا أعرف شيئًا عن RoR، ولكن في معظم تقنيات الويب يتم الاحتفاظ بالجلسات باستخدام ملفات تعريف الارتباط.إذا احتفظت بملفات تعريف الارتباط (لمستخدم معين) عبر مكالمات متعددة من خادم Java الخاص بك إلى مثيل RoR الخاص بك، فمن المفترض أن تكون الأمور على ما يرام.

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