Signalr: تريد حفظ محادثة الدردشة في خادم SQL ولكن لا تدعم

تم إنشاؤها على ٣١ ديسمبر ٢٠١٢  ·  7تعليقات  ·  مصدر: SignalR/SignalR

مرحبا ديفيد،

لقد قمت بإنشاء تطبيق دردشة باستخدام signalR تمامًا مثل دردشة facebook ، والآن أريد الاحتفاظ ببيانات محادثة الدردشة في قاعدة بيانات وأريد عرض هذا السجل لغرفة الدردشة المتوافقة معها ، هل يمكنك من فضلك توجيه كيفية أرشفة ذلك؟ هل تدعم SignRe الاتصال بخادم SQL؟
هل يمكنك أيضًا إرشادك كيف يمكنني الاحتفاظ بمعرف الاتصال حتى أتمكن من إعادة تهيئة الدردشة بعد إعادة النشر تمامًا مثل تطبيق الدردشة على facebook.

Question

التعليق الأكثر فائدة

بادئ ذي بدء ، إذا كنت تبحث عن مساعدة ، فقط قل أنك تبحث عن المساعدة. أنت لا تعرف شيئًا ما ، فهذا لا يعني أن SignalR لا تدعمه أو أنها مشكلة.

  • نظرًا لأنك كنت تقول شيئًا مثل دردشة FB ، فقد افترضت أن لديك بالفعل إدارة حالة تسجيل دخول المستخدم (معرف المستخدم في الجلسة أو ملف تعريف الارتباط أو أيًا كان).
  • أقترح عليك استخدام HUB.
  • بمجرد قيام المستخدم بتسجيل الدخول وتنشيط الدردشة ، فإنك تبدأ اتصال HUB وتحصل على معرف اتصال SignalR
  • نظرًا لأن لديك بالفعل معرف مستخدم للمستخدم المتصل ، احفظ تعيين معرف اتصال SignalR ومعرف المستخدم. (على سبيل المثال: هيكل الجدول: user_id، conn_id، updated_date).
  • عندما تتلقى رسالة دردشة من معرف اتصال ، يمكنك بسهولة البحث عن المستخدم الذي أتت منه.
  • بعد ذلك ، احفظ سجل الدردشة باستخدام معرف المستخدم واسترجع السجل باستخدام معرف المستخدم أيضًا.

النقطة الأساسية هي أنك لا تهتم بمعرف الاتصال. عليك أن ترسمها بمفتاحك الفريد المتسق. مرة أخرى ، أود أن أقترح عدم الاحتفاظ بمعرف الاتصال. من الأفضل أن تكون عشوائيًا. إذا كان من الضروري الحفاظ على معرف conn ، فيمكنك الكتابة فوق منشئ معرف conn الافتراضي.

ال 7 كومينتر

بادئ ذي بدء ، إذا كنت تبحث عن مساعدة ، فقط قل أنك تبحث عن المساعدة. أنت لا تعرف شيئًا ما ، فهذا لا يعني أن SignalR لا تدعمه أو أنها مشكلة.

  • نظرًا لأنك كنت تقول شيئًا مثل دردشة FB ، فقد افترضت أن لديك بالفعل إدارة حالة تسجيل دخول المستخدم (معرف المستخدم في الجلسة أو ملف تعريف الارتباط أو أيًا كان).
  • أقترح عليك استخدام HUB.
  • بمجرد قيام المستخدم بتسجيل الدخول وتنشيط الدردشة ، فإنك تبدأ اتصال HUB وتحصل على معرف اتصال SignalR
  • نظرًا لأن لديك بالفعل معرف مستخدم للمستخدم المتصل ، احفظ تعيين معرف اتصال SignalR ومعرف المستخدم. (على سبيل المثال: هيكل الجدول: user_id، conn_id، updated_date).
  • عندما تتلقى رسالة دردشة من معرف اتصال ، يمكنك بسهولة البحث عن المستخدم الذي أتت منه.
  • بعد ذلك ، احفظ سجل الدردشة باستخدام معرف المستخدم واسترجع السجل باستخدام معرف المستخدم أيضًا.

النقطة الأساسية هي أنك لا تهتم بمعرف الاتصال. عليك أن ترسمها بمفتاحك الفريد المتسق. مرة أخرى ، أود أن أقترح عدم الاحتفاظ بمعرف الاتصال. من الأفضل أن تكون عشوائيًا. إذا كان من الضروري الحفاظ على معرف conn ، فيمكنك الكتابة فوق منشئ معرف conn الافتراضي.

مرحبًا ZeroHackeR ،

شكرًا لردك ، هل هذا يعني أنه يمكننا تمرير معرف الاتصال الخاص بنا؟ ويمكننا مواصلة الدردشة بعد إعادة النشر؟ يعني بعد إعادة تخصيص كل التفاصيل للغرفة المحددة هل ستستمر الدردشة ؟؟

  • أعني ، بمجرد تسجيل المستخدم الدخول ، سيكون لديك معرف المستخدم الخاص به ، أليس كذلك؟
  • لذلك ، تقوم بحفظ معرف المستخدم في متغير الجلسة الخاص بك. على سبيل المثال: في صفحة تسجيل الدخول إلى تطبيقك ، بعد مصادقة المستخدم ، احفظ معرف المستخدم الخاص به في الجلسة. على سبيل المثال: الجلسة ["userid"] = "123" ؛
  • بعد ذلك ، بمجرد اتصال المستخدم بالمحادثة ، سيقوم SignalR بإنشاء معرف اتصال. يمكنك حفظ معرف conn وتعيين معرف المستخدم إلى قاعدة البيانات أيضًا (اختياري ، ولكنه سيكون مفيدًا للتحقق واستخراج البيانات. من أجل البساطة ، لن أتحدث عن ذلك هنا)

فيما يلي نماذج من طرق خادم الدردشة:

ج #
Public override System.Threading.Tasks.Task OnConnected ()
{
// احصل على معرف المستخدم. يفترض أن المستخدم قد تم تسجيله قبل الاتصال بالمحادثة ويتم حفظ معرف المستخدم في الجلسة.
string UserID = (سلسلة) HttpContext.Current.Session ["userid"] ؛

      // Get ChatHistory and call the client function. See below
      this.GetHistory(UserID); 

      // Get ConnID
      string ConnID =  Context.ConnectionId; 

      // Save them in DB. You got to create a DB class to handle this. (Optional)
      DB.UpdateConnID(UserID, ConnID); 
}

private void GetHistory(UserID)
{
      // Get Chat History from DB. You got to create a DB class to handle this.
      string History = DB.GetChatHistory(UserID); 

      // Send Chat History to Client. You got to create chatHistory handler in Client side.
      Clients.Caller.chatHistory(History );           
}

 // This method is to be called by Client 
public void Chat(string Message)
{
      // Get UserID. Assumed the user is logged before connecting to chat and userid is saved in session.
     string UserID = (string)HttpContext.Current.Session["userid"]; 

     // Save Chat in DB. You got to create a DB class to handle this
     DB.SaveChat(UserID, Message); 

     // Send Chat Message to All connected Clients. You got to create chatMessage handler in Client side.
     Clients.All.chatMessage(Message);  
}

""

ملاحظة: لقد كتبت هنا للتو. لم تختبر بعد.

مرحبًا ZeroHackeR ،

مرة أخرى شكرا جزيلا ، هل لديك أي مثال تقريبي؟ لا أتوقع أن أجعله يعمل بنسبة 100٪ ، أريد فقط أن يكون الغرض المرجعي.
شكرا جزيلا

هل يمكننا نقل هذا إلى StackOverflow؟ هذه ليست مشكلة في SignalR وستستفيد في SO أكثر من هنا.

niravpatel لقد كتبت 3 طرق فقط لأجلك. لماذا تطلب المزيد؟ إذا كنت لا تعرف كيفية الحفظ في DB ، فمن الأفضل أن تذهب إلى مكتبة وتجد بعض كتب C #. يجب أن تحاول أولاً بناءً عليها ، قبل أن تسأل. لننهي موضوعنا هنا.

raybooysen موافق تمامًا.

إغلاق

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات