SignalR搭建在Linux中以Nginx服务与IISExpress和SelfHost相比较来说,我碰到最大的麻烦是如何更改配置文件和搭建环境,下面将教大家如何搭建Nginx服务。

1、在Linux安装环境

  1. 安装mono,需要下载最新版本Mono编译器,下载地址如下

http://www.mono-project.com/download/#download-lin

–命令行输入 mono -V 查看mono版本,查看是否安装成功

2、安装Nginx,下载地址如下

http://nginx.org/

–sudo service nginx start 开启Nginx服务,查看是否安装成功

3、安装成功后,需要更改Nginx配置文件

–gedit /etc/nginx/nginx.conf 打开配置文件 加上如下代码

在http{}中加上如下代码

 map $http_upgrade $connection_upgrade{
        default upgrade;
        ‘’ close;
} 

server{
    listen 8020;    //客户端用的端口号
    server_name 192.168.254.135;   //这里为Linux中IP地址
    location / {
        proxy_pass http://192.168.254.135:9999;   //服务端url
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
}
}

加完代码后需重新运行nginx服务 ,查看nginx服务是否能够成功启动

sudo service nginx restart

2、搭建SignalR服务端

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
using Owin;
using Microsoft.Owin.Cors;

namespace Signalr_SelfHost
{
    class Program
    {
        static void Main(string[] args)
        {
            var uri = "http://127.0.0.1:9999";
            using (Microsoft.Owin.Hosting.WebApp.Start<Startup>(uri))
            {
                Console.WriteLine(string.Format("Server stared on {0}", uri));
                Console.ReadLine();
            }
        }
    }

    class Startup
    {
        static Hub hub;
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
            var configuration = new HubConfiguration();
            configuration.EnableDetailedErrors = true;
            app.MapSignalR("/signalr", configuration);
            hub = new MyHub();
        }
    }

    public class MyHub : Hub
    {
        public override Task OnConnected()
        {
            Console.WriteLine("有客户端连接");
            return base.OnConnected();
        }

        public void Send(string message)
        {
            string name = "BG";
            Clients.All.SendMessage(name,message);
        }            
    }
}

注:这里以SelfHost服务为例,以下为如何在Linux运行.sln项目

msbuild xxx.sln —生成Debug

msbuild xxx.sln /p:Configuration=Release —生成Release

在生成的Debug或Release文件里,运行.exe文件即可。

mono xxx.exe


3、搭建SignalR客户端

注:客户端可以在window下运行,也可以在Linux中用mono运行(mono支持运行Winform客户端),本文介绍客户端在window下运行

客户端代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR.Client;

namespace ClientsConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http:/192.168.254.135:9999";
            HubConnection _conn = new HubConnection(url,true);
            IHubProxy _proxy = _conn.CreateHubProxy("MyHub");

            _conn.Start();
            _proxy.On<string, string>("sendMessage", (n, s) =>
            {
            });

            _conn.StateChanged += new Action<StateChange>(tgt =>
            {
                if (((StateChange)tgt).NewState == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected)
                {
                        _proxy.Invoke("send", "Hello");                 
                }
            });
            Console.ReadLine();
        }
    }
}

总结:这边搭建SignalR3种不同服务(IISExpress、Owin SlefHost、Linux Nginx),客户端(Console控制台、Winform引用),

目的是为了测试哪一种服务端和客户端搭配传输效率更快、并发性更好。
测试过程:N个客户端同时连接并且发送数据给所有客户端的效率。
那么在我自己这边测试结果为SignalR在Linux搭载Nginx服务效果最佳。大家可以去测试一下!

Logo

更多推荐