SignalRはサーバとクライアントのリアルタイム通信を実現する


まず関連DLLを参照
2 StartupファイルはSignalRのエントリです
using Microsoft.Owin;using Owin;

[assembly: OwinStartup(typeof(SignalR.Core.Startup))]namespace SignalR.Core
{    public class Startup
    {        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }

    }
}

SignalRのJSファイルの3組
四具体的な業務を実現するコアクラスファイル、それはHubを統合する必要があり、特性HubNameを使用してSignalRに名前を付けて、クライアントでそれを呼び出す必要がある
using Microsoft.AspNet.SignalR;using Microsoft.AspNet.SignalR.Hubs;using SignalR.Core.Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web;namespace SignalR.Core
{

    [HubName("UrlHub")]    public class UrlValid : Hub
    {        static List ConnectedUsers = new List();        public void Connect(string url,string userID)
        {            var id = Context.ConnectionId;if (ConnectedUsers.Count(x => x.ConnectionId == id) == 0)
            {
                ConnectedUsers.Add(new CurrentUser
                {
                    ConnectionId = id,
                    UserID = userID,
                });
                Clients.Caller.onConnected(id, userID, url);                //Clients.AllExcept(id).onNewUserConnected(id, userID);
                Clients.Client(id).onNewUserConnected(id, userID);
            }            else
            {

                Clients.Caller.onConnected(id, userID, url);
                Clients.Client(id).onExistUserConnected(id, userID);                // Clients.AllExcept(id).onExistUserConnected(id, userID);            }
        }        /// 
        ///          /// 
        public void Exit(string userID)
        {            var id = Context.ConnectionId;   
            OnDisconnected();
            Clients.Caller.onConnected(id, userID, "");
            Clients.Client(id).onExit(id, userID);
        }        /// 
        ///          /// 
        /// 
        public override System.Threading.Tasks.Task OnDisconnected()
        {            var item = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);            if (item != null)
            {
                ConnectedUsers.Remove(item);                var id = Context.ConnectionId;
                Clients.All.onUserDisconnected(id, item.UserID);

            }            return base.OnDisconnected();
        }

    }
}

五コアJS機能コード断片
    
    

    
    
    
    

    
        $(function () {            // Declare a proxy to reference the hub
            var chatHub = $.connection.UrlHub;
            registerClientMethods(chatHub);            // Start Hub            $.connection.hub.start().done(function () {
                registerEvents(chatHub);
            });

        });        //         function registerEvents(chatHub) {
            $("#btn").click(function () {                var url = "dasfjasldfj";
                chatHub.server.connect(url);
            });

            $("#logOut").click(function () {
                chatHub.server.exit();
            });

        }        //         function registerClientMethods(chatHub) {

            chatHub.client.onConnected = function (id, userID, url) {
                console.log(" " + url);
            }

            chatHub.client.onUserDisconnected = function (id, userID) {
                console.log(" ");
            }

            chatHub.client.onNewUserConnected = function (id, userID) {
                alert(" ");
            }

            chatHub.client.onExistUserConnected = function (id, userID) {
                alert(" " + userID + " ");
            }

            chatHub.client.onExit = function (id, userID) {

                alert(" " + userID + " !");
            }

        }    

静的クラス
 public static class BroadCast    {        public static void SendAllMessage(string name, string mes)        {            IHubContext chat = GlobalHost.ConnectionManager.GetHubContext();            chat.Clients.All.broadcastMessage(name, mes);        }
    }