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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值