SignalR如何搭建在Linux中以Nginx负载的服务端(C#)
SignalR搭建在Linux中以Nginx服务与IISExpress和SelfHost相比较来说,我碰到最大的麻烦是如何更改配置文件和搭建环境,下面将教大家如何搭建Nginx服务。1、在Linux安装环境安装mono,需要下载最新版本Mono编译器,下载地址如下http://www.mono-project.com/download/#download-lin–命令行输入 mono -V
SignalR搭建在Linux中以Nginx服务与IISExpress和SelfHost相比较来说,我碰到最大的麻烦是如何更改配置文件和搭建环境,下面将教大家如何搭建Nginx服务。
1、在Linux安装环境
- 安装mono,需要下载最新版本Mono编译器,下载地址如下
–命令行输入 mono -V 查看mono版本,查看是否安装成功
2、安装Nginx,下载地址如下
–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服务效果最佳。大家可以去测试一下!
更多推荐
所有评论(0)