服务端,利用控制台程序来实现,通过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();