Signalr: Quiere guardar la conversación de chat en el servidor SQL pero no es compatible

Creado en 31 dic. 2012  ·  7Comentarios  ·  Fuente: SignalR/SignalR

Hola David,

Hice una aplicación de chat usando signalR al igual que el chat de Facebook. Ahora quiero conservar los datos de la conversación de chat en la base de datos y quiero mostrar ese historial para su sala de chat correspondiente. ¿Puede guiarme sobre cómo archivar eso? ¿SignalR admite la comunicación con el servidor SQL?
También, ¿puede orientarme sobre cómo puedo mantener la ID de conexión para poder reiniciar el chat después de la devolución de datos como una aplicación de chat de Facebook?

Question

Comentario más útil

En primer lugar, si está buscando ayuda, diga que está buscando ayuda. No sabe algo, no significa que SignalR no lo admita o sea un problema.

  • Como estaba diciendo algo como el chat de FB, asumí que ya tiene su administración de estado de inicio de sesión de usuario (ID de usuario en sesión o cookie o lo que sea).
  • Te sugiero que uses HUB.
  • Una vez que un usuario inicia sesión y activa el chat, inicia la conexión HUB y obtiene la identificación de conexión de SignalR.
  • Como ya tiene el ID de usuario del usuario conectado, guarde la asignación del ID de conexión y el ID de usuario de SignalR. (por ejemplo: Estructura de la tabla: user_id, conn_id, updated_date).
  • cuando recibió un mensaje de chat de una identificación de conexión, puede buscar fácilmente de qué usuario proviene.
  • Luego, guarde el registro de chat usando el ID de usuario y recupere el registro usando el ID de usuario también.

El punto clave es que no te importa el id de conexión. Tienes que mapearlo con tu propia clave única consistente. Una vez más, sugeriría no mantener la conn id. Es mejor que sea aleatorio. Si es imprescindible mantener el ID de conexión, puede sobrescribir el generador de ID de conexión predeterminado.

Todos 7 comentarios

En primer lugar, si está buscando ayuda, diga que está buscando ayuda. No sabe algo, no significa que SignalR no lo admita o sea un problema.

  • Como estaba diciendo algo como el chat de FB, asumí que ya tiene su administración de estado de inicio de sesión de usuario (ID de usuario en sesión o cookie o lo que sea).
  • Te sugiero que uses HUB.
  • Una vez que un usuario inicia sesión y activa el chat, inicia la conexión HUB y obtiene la identificación de conexión de SignalR.
  • Como ya tiene el ID de usuario del usuario conectado, guarde la asignación del ID de conexión y el ID de usuario de SignalR. (por ejemplo: Estructura de la tabla: user_id, conn_id, updated_date).
  • cuando recibió un mensaje de chat de una identificación de conexión, puede buscar fácilmente de qué usuario proviene.
  • Luego, guarde el registro de chat usando el ID de usuario y recupere el registro usando el ID de usuario también.

El punto clave es que no te importa el id de conexión. Tienes que mapearlo con tu propia clave única consistente. Una vez más, sugeriría no mantener la conn id. Es mejor que sea aleatorio. Si es imprescindible mantener el ID de conexión, puede sobrescribir el generador de ID de conexión predeterminado.

Hola ZeroHackeR,

Gracias por su respuesta. ¿Significa que podemos pasar nuestra propia identificación de conexión? y podemos continuar nuestro chat después de la publicación? Quiero decir, después de reasignar todos los detalles a la sala específica, ¿continuará el chat?

  • Quiero decir, una vez que un usuario inicie sesión, tendrá su ID de usuario, ¿verdad?
  • Entonces, guarde el ID de usuario en su variable de sesión. Por ejemplo: en la página de inicio de sesión de su aplicación, después de que un usuario esté autenticado, guarde su ID de usuario en la sesión. Por ejemplo: Session ["userid"] = "123";
  • Luego, una vez que el usuario se conecte al chat, SignalR generará una ID de conexión. También puede guardar la identificación de conexión y la asignación de identificación de usuario en la base de datos (opcional, pero será útil para la verificación y la minería de datos. En aras de la simplicidad, no hablaré de ello aquí).

Estos son los métodos de muestra del servidor de chat:

`` C #
anulación pública System.Threading.Tasks.Task OnConnected ()
{
// Obtener UserID. Se supone que el usuario está registrado antes de conectarse al chat y el ID de usuario se guarda en la sesión.
cadena UserID = (cadena) 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);  
}

''

NOTA: acabo de escribir aquí. Aún no probado.

Hola ZeroHackeR,

Nuevamente muchas gracias, ¿tiene algún ejemplo aproximado? No espero que funcione al 100%, solo quiero para el propósito de referencia.
Muchas gracias

¿Podemos llevar esto a StackOverflow? Esto no es un problema en SignalR y se beneficiaría más en SO que aquí.

@niravpatel Escribí 3 métodos solo para ti. ¿Por qué pedir más? Si no sabe cómo guardar en la base de datos, es mejor que vaya a una biblioteca y busque algunos libros de C #. Debería probar primero basándose en ellos, antes de preguntar. Terminemos nuestro tema aquí.

@raybooysen Totalmente de acuerdo.

Clausura

¿Fue útil esta página
0 / 5 - 0 calificaciones