2015-05-14 2 views
7

Я занимаюсь разработкой библиотеки классов, которая содержит общие методы для этих сценариев:Сохранение чат разговоров в базе данных SQL с помощью signalR

  • Живой чат поддержки (1 на 1 частный текстовый чат, с большим количеством администраторов и гостей)
  • Номера с большим количеством пользователей, где вы можете отправить широковещательные и личные сообщения

Эти две функции выше уже реализованы, и теперь это необходимо для моего приложения для сохранения сообщений.

Мой вопрос, что это лучший способ для хранения чатов в базе данных SQL:

  1. Everytime я нажимаю отправить, я вставляю сообщение в базе данных?

  2. Создайте список для каждого пользователя и каждый раз, когда я нажимаю кнопку «Отправить», сообщение сохраняется в списке пользователей, отправивших сообщение. Затем, если пользователь отключается, я собираюсь перебирать список сообщений и каждое сообщение вставлять их все в db.

Есть ли другие решения?

Что я сейчас делаю, это следующее. У меня есть этот метод, который находится в моем классе Hub:

public void saveMessagetoDB(string userName, string message) 
{ 
    var ctx = new TestEntities1(); 

    var msg = new tbl_Conversation {Msg = message}; 
    ctx.tbl_Conversation.Add(msg); 
    ctx.SaveChanges();   
} 

Я называю этот метод saveMessagetoDB на моей стороне клиента HTML-файл, как это:

$('#btnSendMessage').click(function() { 
     var msg = $("#txtMessage").val(); 

     if (msg.length > 0) { 

      var userName = $('#hUserName').val(); 
      // <<<<<-- ***** Return to Server [ SaveMessagetoDB ] ***** 
      objHub.server.saveMessagetoDB(userName, msg); 
+1

Это позволит получить много мнения и очень мало фактов. Это делает этот вопрос вне сферы действия SO. Я бы предложил вставить их, как они есть, но это зависит от того, что это приложение. –

ответ

0

SignalR отлично подходит для применения чата и Wouldn даже не нужно хранить что-либо в SQL, если вы не захотите создать стенограмму чата позднее (что может даже не понадобиться).

Я предлагаю сначала начать общение с SignalR (ничего не делать с sql). Затем, как только это будет работать, вы можете поместить SQL-журнал по мере необходимости в свой концентратор signalR.

Скорее всего, имеет смысл писать в sql каждое сообщение.

1

Если вы решили сохранить чаты в базе данных, вам нужно будет вставить/обновить сообщения по мере их возникновения.

Если вы используете PersistentConnection, то вы можете подключить в OnReceivedAsync событие и вставить данные/обновления с этого события:

protected override Task OnConnectedAsync(IRequest request, string connectionId) 
{ 
    _clients.Add(connectionId, string.Empty); 
    ChatData chatData = new ChatData("Server", "A new user has joined the room."); 
    return Connection.Broadcast(chatData); 
} 

Или в классе SignalR, который наследует от концентратора, вы можете оставаться в Db прямо перед тем, как вы уведомили клиентов.

+1

У Уильяма У меня уже есть приложение, которое работает с этими двумя сценариями, о которых я упоминал, но одна из функций, которые я должен иметь, - это сохранение e-сообщений. Я хотел бы знать, сделал ли кто-нибудь что-то подобное и какие лучшие варианты –

+0

Joao , см. мой пересмотренный ответ. –

+0

Я вижу, но я использую hub API –

Смежные вопросы