【问题标题】:Signal R Live Chat Application in MVCMVC 中的 Signal R 实时聊天应用程序
【发布时间】:2017-11-09 11:36:23
【问题描述】:

我想在 ASP.NET MVC 中使用 SignalR 创建实时聊天应用程序。我已经创建了这个,但问题是它正在向连接到该服务器的所有用户发送消息。我只想在两个用户之间进行私人聊天。所以请帮帮我。这是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;

//this is ChatHub.cs file
namespace LiveChat
{
public class ChatHub : Hub
{
    public override System.Threading.Tasks.Task OnConnected()
    {
        Clients.Caller.user(Context.User.Identity.Name);
        return base.OnConnected();
    }
    public void send(string message)
    {
        Clients.Caller.message("You:" + message);         
        Clients.Others.message(Context.User.Identity.Name + ": " + message);

    }

}}

//这是启动类

using Microsoft.Owin;
using Owin;
[assembly: OwinStartupAttribute(typeof(LiveChat.Startup))]
namespace LiveChat
{
public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        app.MapSignalR();
    }
}
}

//This is my js
 <script>
var hub = $.connection.chatHub;
hub.client.message = function (msg) {
$("#message").append("<li>" + msg + "</li>")
}

hub.client.user = function (msg) {
$("#user").append("<li>" + msg + "</li>")
}
$.connection.hub.start(function () {
$("#send").click(function () {
    if ($("#txt").val() == "") {
        return;
    }
    hub.server.send($("#txt").val());
    $("#txt").val(" ");
});
$("#txt").keyup(function (event) {
    if ($("#txt").val() == "") {
        return;
    }
    if (event.keyCode == 13) {
        hub.server.send($("#txt").val());
    }
});
});
</script>

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以使用静态列表,该列表包含连接到集线器的所有客户端及其连接 ID, 在发送消息时,您必须将文本和目标成员发送到集线器。然后发送给特定的成员。

    在函数 OnConnected 中将成员添加到列表中,客户端 ID:

    Context.clientID
    

    在函数 send 中发送给特定的客户端

    var clientId = ""; // get from the static list by id you got
    var scbscriber = Clients.Client(clientId);
    scbscriber.message(text);
    

    【讨论】:

      【解决方案2】:
      public class ChatHub : Hub
      {
          private static List<Users> ConnectedUsers;
      
          public ChatHub()
          {
              ConnectedUsers = new List<Users>();
          }
      
          public override System.Threading.Tasks.Task OnConnected()
          {
              Clients.Caller.user(Context.User.Identity.Name);
              ConnectedUsers.Add(new Users(){
                  UserName = Context.User.Identity.Name,
                  ClientId = Context.clientID;
              });
              return base.OnConnected();
          }
          public void send(string message, string UserName)
          {
      
              //Clients.Caller.message("You:" + message); 
              var clientId = ConnectedUsers.FirstOrDefulat(x=>x.UserName == UserName).ClientId; // get from the static list by id you got     
              var scbscriber = Clients.Client(clientId);
              scbscriber.message(Context.User.Identity.Name + ": "message);
      
              //Clients.Others.message(Context.User.Identity.Name + ": " + message);
      
          }
      
      }
      public class Users
          {
                public string UserName{get;set;}
                public string ClientId {get;set;}
          }
      

      【讨论】:

        【解决方案3】:

        你来了,伙计:

         public void SendPrivateMessage(Messaging objMessaging)
            {
                var fromNurse = objConnectedUserList.FirstOrDefault(x => x.NurseId == objMessaging.FromNurseId);
                var toNurse = objConnectedUserList.FirstOrDefault(x => x.NurseId == objMessaging.ToNurseId);
                var chatObject = new { MessageThreadId = 0, Name = fromNurse.NurseName, Message = objMessaging.Message,  DTStmp = DateTime.Now, frmNurseId = fromNurse.NurseId };
        
                Result objResult = objMessagingDAL.InsertMessage(objMessaging);
        
                if (toNurse != null)
                {
                    Clients.Client(toNurse.ConnectionId).ReceivePrivateMessage(chatObject);
                }
                Clients.Caller.ReceivePrivateMessage(chatObject);
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-25
          • 1970-01-01
          • 1970-01-01
          • 2014-05-03
          • 1970-01-01
          • 2014-05-10
          相关资源
          最近更新 更多