SignalR學習

服務端,利用控制檯程序來實現,通過SignalR的集線器類來實現

1.創建項目名稱Server.Net

2.通過nuget引入相關包

 

3.創建MyHub繼承Hub類

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Server.Net {
    public class MyHub:Hub {
        List<string> userList = new List<string>();

        [HubMethodName("Send")]//使用此特性可以修改方法名 客戶端調用用此方法名
        public void Send(string identify,string msg) {
            Console.WriteLine($"id:{identify},msg:{msg}");
            Clients.All.ReceiveMsg(identify, msg);
        }

        //客戶端連接上時,會進入到此方法中
        public override Task OnConnected() {
            //客戶端連接成功
            //連接成功後記錄連接的ID作爲identify
            userList.Add(Context.ConnectionId);
            Console.WriteLine($"{Context.ConnectionId},上線");
            return base.OnConnected();
        }

        public override Task OnReconnected() {
            //客戶端重連中
            //連接成功後記錄連接的ID作爲identify
            userList.Add(Context.ConnectionId);
            Console.WriteLine($"{Context.ConnectionId},重連");
            return base.OnReconnected();
        }

        public override Task OnDisconnected(bool stopCalled) {
            //客戶端斷開
            //連接斷開後將ID從列表中去掉
            userList.Remove(Context.ConnectionId);
            Console.WriteLine($"{Context.ConnectionId},下線");
            return base.OnDisconnected(stopCalled);
        }
    }
}

4.創建Startup,配置SignalR

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin.Cors;
using Owin;

namespace Server.Net {
    public class Startup {
        public void Configuration(IAppBuilder app) {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
}

5.創建HubServer類啓動MyHub

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin.Hosting;


namespace Server.Net {
    public class HubServer {
        private IDisposable SignalR { get; set; }
        private string url = "http://127.0.0.1:8086";

        public async void RunServer() {
            await Task.Run(() => StartServer());
        }

        private void StartServer() {
            try {
                SignalR = WebApp.Start<Startup>(url);
                Console.WriteLine("Server Open Success");
            }
            catch (TargetInvocationException) {
                SignalR.Dispose();
                Console.WriteLine("Server failed to start. A server is already running on " + url);
                return;
            }
        }
    }

}

在programe中Main下啓動就行了

            HubServer svc = new HubServer();
            svc.RunServer();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章