SignalR搭建在Linux中以Nginx服务与IISExpress和SelfHost相比较来说,我碰到最大的麻烦是如何更改配置文件和搭建环境,下面将教大家如何搭建Nginx服务。
1、在Linux安装环境
安装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 restart2、搭建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服务效果最佳。大家可以去测试一下!