服務端,利用控制檯程序來實現,通過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();