• SignalR入门之多平台SignalR服务端


    之前创建SignalR服务端是基于Web应用程序而言的。那么能不能把SignalR服务端做成控制台应用程序、Winform或windows服务呢?

    答案是肯定的。

    之前尽管看起来好像是IIS和ASP.Net构成托管SignalR服务的唯一环境,但事实上并非如此,很多情况下采用的并非是IIS和ASP.NET。

    现在,在这里以控制台程序为例,将SignalR服务端建立在控制台程序里。

    如何在控制台程序实现基于Hub或持久性连接的SignalR服务呢,首先安装下面的包:

    install-package Microsoft.AspNet.SignalR.SelfHost

    安装完成后,项目会自动加载需要引用的库文件。

    然后在控制台的Program类中

     1 using System.Linq;
     2 using System.Text;
     3 using System.Threading.Tasks;
     4 
     5 namespace ConsoleApplication1
     6 {
     7     class Program
     8     {
     9         static void Main(string[] args)
    10         {
    11             using (WebApp.Start<Startup>("http://localhost:8888/"))//启动服务,访问路径在这里配置。
    12             {
    13                 Console.WriteLine("Server running at http://localhost:8888/");
    14                 Console.ReadLine();
    15             }
    16         }
    17     }
    18 }

    在上面的代码中,我们可以看出需要一个启动类Starup,这个类与我们之前建立持久性连接或Hub一样。

     1 using System;
     2 using System.Threading.Tasks;
     3 using Microsoft.Owin;
     4 using Owin;
     5 
     6 [assembly: OwinStartup(typeof(Startup))]
     7 
     8 public class Startup
     9 {
    10     public void Configuration(IAppBuilder app)
    11     {
    12         app.MapSignalR<TestConnection>("/test");//配置指定持久性连接类,同时映射访问路径后面有用
    13     }
    14 }
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Threading.Tasks;
     5 using System.Web;
     6 using Microsoft.AspNet.SignalR;
     7 
     8 public class TestConnection : PersistentConnection
     9 {
    10     protected override Task OnConnected(IRequest request, string connectionId)
    11     {
    12         return Connection.Send(connectionId, "Welcome!");
    13     }
    14 
    15     protected override Task OnReceived(IRequest request, string connectionId, string data)
    16     {
    17         Console.WriteLine(connectionId+"============="+data);//服务端接受消息
    18         return Connection.Broadcast(data);//将消息发送给所有客户端
    19     }
    20 }

    以上的方式是在控制台里面建立SignalR服务,以持久性连接的方式进行编码的。

    当然,我们也可以利用Hub来设置服务端,方式与之前的一样。

    SignalR的服务端建立好后,我们需要建立一个客户端,之前,我们的客户端都是在html中以js的方式进行建立连接的。那么现在,我们将客户端也建立为控制台应用程序。

    首先建立一个控制台应用程序,然后安装如下包:

    install-package microsoft.aspnet.signalr.client

     

    然后在Program类中的Main方法中编写:

     1 using Microsoft.AspNet.SignalR.Client.Transports;
     2 using System;
     3 using System.Collections.Generic;
     4 using System.Linq;
     5 using System.Text;
     6 using System.Threading.Tasks;
     7 using Microsoft.AspNet.SignalR;
     8 using Microsoft.AspNet.SignalR.Client;
     9 namespace ConsoleApplication2
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             try
    16             {
    17                 //GlobalHost
    18                 var connection = new Connection("http://localhost:8888/test");//服务端配置好的访问路径以及持久性连接映射路径
    19                 
    20                 connection.Start();//开始连接
    21                 connection.Received += Connection_Received;//配置接受消息事件
    22                 string str = "";
    23                 while ((str = Console.ReadLine()) != "")
    24                 {
    25                     connection.Send(str);//发送消息
    26                 }
    27         
    28             }
    29             catch (Exception ex)
    30             {
    31 
    32                 Console.WriteLine(ex.Message);
    33             }
    34             Console.Read();
    35         }
    36 
    37         private static void Connection_Received(string obj)
    38         {
    39             Console.WriteLine(obj);
    40         }
    41     }
    42 }

     

  • 相关阅读:
    计算字符串相似度算法——Levenshtein
    信息检索参考网站
    文献检索
    【BZOJ】1684: [Usaco2005 Oct]Close Encounter(暴力+c++)
    【BZOJ】1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(线段树+dp)
    【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)
    【BZOJ】1652: [Usaco2006 Feb]Treats for the Cows(dp)
    【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)
    Codeforces Round #265 (Div. 2)
    中秋节模拟赛之冷月葬花魂(被虐瞎)
  • 原文地址:https://www.cnblogs.com/hapgaoyi/p/6179770.html
Copyright © 2020-2023  润新知