1、SignalR客户端,新建控制台程序,.Net Framework平台
添加Nuget包
Microsoft.AspNet.SignalR.Client
class Program
{
static void Main(string[] args)
{
IHubProxy hub;
//服务端配置 Startup类中 app.MapSignalR();
//string url = "http://localhost:5000/signalr";
//服务端配置 Startup类中 app.MapSignalR("/hubs", new HubConfiguration());
string url = "http://localhost:5000/hubs";
HubConnection connection = new HubConnection(url);
connection.ConnectionSlow += Connection_ConnectionSlow;
connection.Error += Connection_Error;
connection.StateChanged += Connection_StateChanged;
///服务端 配置 [HubName("MyTestHub")]
hub = connection.CreateHubProxy("MyTestHub");
connection.Start().Wait();
hub.On("addMessage", x =>
Console.WriteLine(x));
hub.On("SendClient", x =>
{
Console.WriteLine(x);
}
) ;
string groupName = Console.ReadLine();
hub.Invoke("Sign", groupName).Wait();
string sendgroupName = Console.ReadLine();
hub.Invoke("SameGroupMessage", sendgroupName).Wait();
string line = "";
while ((line = Console.ReadLine()) != null)
{
hub.Invoke("Send", "测试", line).Wait();
}
Console.ReadKey();
//connection.Stop();
//connection.Dispose();
}
private static void Connection_StateChanged(StateChange obj)
{
if (obj.NewState == ConnectionState.Disconnected)
{
Console.WriteLine("连接状态为未连接啦");
}
}
private static void Connection_Error(Exception obj)
{
Console.WriteLine("连接发生错误啦");
}
private static void Connection_ConnectionSlow()
{
Console.WriteLine("连接超时啦");
}
}
2、SignalR服务端,新建控制台程序,.Net Framework平台
添加Nuget包
Microsoft.AspNet.SignalR.Core
Microsoft.Owin.Hosting
Microsoft.Owin.Cors
Microsoft.Owin.Host.HttpListener
class Program
{
static void Main(string[] args)
{
using (var app = WebApp.Start<Startup>("http://localhost:5000/"))
{
Console.WriteLine("服务器运行 http://localhost:5000/");
Console.ReadLine();
}
}
}
public class Startup
{
//GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
//GlobalHost.Configuration.DefaultMessageBufferSize = 500;
//GlobalHost.ConnectionManager.GetHubContext
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
//app.MapSignalR();
app.MapSignalR("/hubs", new HubConfiguration());
}
}
[HubName("MyTestHub")]
public class MyHub : Hub
{
public void Send(string name, string message)
{
String msg = String.Format("Message send by {0}: {1}", name, message);
Console.WriteLine(msg);
Clients.Client(GlobalModel._ids[0]).addMessage(msg);
}
public void Sign(string projectNo)
{
Groups.Add(Context.ConnectionId, projectNo);
}
public void SameGroupMessage(string name)
{
Clients.Group(name).SendClient($"咱们是同一个组{name}");
}
public override Task OnConnected()
{
Console.WriteLine("Client connected: " + Context.ConnectionId);
GlobalModel._ids.Add(Context.ConnectionId);
return base.OnConnected();
}
public override Task OnDisconnected(Boolean stopCall)
{
Console.WriteLine("Client disconnected: " + Context.ConnectionId);
return base.OnDisconnected(true);
}
}
public class GlobalModel
{
public static List<string> _ids = new List<string>();
}