快速搭建CentOS+ASP.NET Core环境支持WebSocket

以前用python,go尝试在linux下做web服务,python没有强类型支持与高性能,go又没有很好的集成开发环境(还有强迫症的语法),回头看了几次.net,都没有时间尝试,现终于实现了这些想法,与大家分享。做web大项目,做工程,必须要有称手的工具帮我调试、测试、开发。工程化很重要,VS是一个称职好选手。

环境:CentOS 7.x,.net core 2

以下.net core 2安装操作为官方方法。如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就可以了。如果你使用Bash On Windows,那么与实际对应的Linux子系统安装完全相同。

https://www.microsoft.com/net/learn/get-started/linux/centos

CentOS安装.net core(其他系统在这个页面都可以选择,包括:RHEL、Ubuntu、Debian、Fedora、openSUSE):

依次执行(root下没有sudo也可以):

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c ‘echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo‘

sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.101

只需要这几部,.net core 2就安装好了。

用dotnet命令创建空web项目,编译测试:

dotnet new web -o wstest
dotnet build wstest
dotnet run --project wstest

注:dotnet new 命令会帮你创建项目,包括文件夹,必要的项目文件。build与run命令之前可以cd wstest,这样就可以免去后面的参数,把当前目录当作操作对象。

注:可以再简洁点:dotnet run -p wstest。编译运行一起完成。

无意外的话,项目已经启动,并且在localhost(端口默认是5000)开始监听http请求。做这些事情的方便快捷是python、go、node.js、PHP、JAVA等等不能比的。当然,如果你在Windows下,就更快了,包括后续的编码、调试、测试。

接下来,我们进入WebSocket阶段。

1、我们先创建一个html文件,放到项目的wwwroot目录下,用于测试WebSocket。

<!DOCTYPE html>
<html>
<body>
    <div id="out"></div>
    <script>
        var ws = new WebSocket("ws://127.0.0.1:5000/ws")
        ws.onopen = function () {
            log("open")
        }
        ws.onmessage = function (ev) {
            log(ev.data)
        }
        function log(text) {
            out.innerHTML+="<div>"+text+"</div>"
        }
    </script>
</body>
</html>

2、开启asp.net的静态文件访问与WebSocket支持。Linux下的asp.net宿主服务Kestrel已经支持WebSocket,可以直接运行。

在Startup.cs的public Configure成员函数中添加:

app.UseWebSockets();
app.UseStaticFiles();

3、为Startup.cs的Startup类添加WebSocket处理方法(成员函数):

        async Task Echo(HttpContext ctx, WebSocket ws)
        {
            var bytes = System.Text.UTF8Encoding.UTF8.GetBytes("ok");
            var buff = new ArraySegment<byte>(bytes);
            await ws.SendAsync(buff, WebSocketMessageType.Text, true, System.Threading.CancellationToken.None);
        }

4、再为Startup.cs的public Configure成员函数添加处理函数,可选择去掉app.Run的调用:

            app.Use(async (context, next) =>
            {
                if (context.WebSockets.IsWebSocketRequest)
                {
                    WebSocket ws = await context.WebSockets.AcceptWebSocketAsync();
                    await Echo(context, ws);
                }
                else
                    await next();
            });

5、Startup.cs文件的头部添加引用:

using System.Net.WebSockets;

代码就这么多了。接下来验证结果。

注意:

1、如果你放到华为云、腾讯云,这样有安全组的服务器上,你需要开启之前提到的端口TCP转入权限。

2、test.html中的websocket地址请更换为实际的服务器地址与端口。

3、动态IP支持的云主机自己是不知道自己的外网IP地址的,所以只能监听0.0.0.0端口或者内外绑定的端口。

4、注意自己的防火墙是否放行对应的端口,可用iptables或firewall-cmd查询,CentOS7默认采用firewall-cmd作为防火墙的操作端。iptables也可以,但是不能保存。可安装iptables-services解决。

dotnet run以后,你可以找个浏览器访问你的http服务了。

如果顺利,你可以看到页面输出ok字样。说明,asp.net core的静态页面已经输出,并且页面用WebSocket协议访问我们的http服务。

不顺利的可能基本是监听的IP地址无法访问或端口未开放。

另一个原因是dotnet创建的项目里没有项目配置文件,你可能不知道怎么配置监听ip与端口。下面是launchSettings.json文件。你应该把它放到项目的Properties文件夹中。它是我从VisualStudio向导生成的文件中提取的。

{
  "profiles": {
    "anyname": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://0.0.0.0:5000/"
    }
  }
}

好了,祝你顺利!

原文地址:https://www.cnblogs.com/fyter/p/linux_centos_aspnet_core_websocket.html

时间: 2024-08-29 02:29:50

快速搭建CentOS+ASP.NET Core环境支持WebSocket的相关文章

ASP.NET Core环境并运行 继续跨平台

ASP.NET Core环境并运行 继续跨平台 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环境 继续.NET跨平台 上一篇:使用VS Code开发ASP.NET Core 应用程序 今天来学习一下ASP.NET Core 运行在Ubuntu中.无需安装mono . 环境 Ubuntu 14.04.4 LTS 服务器版 全新安装系统. 下载地址:http://mirrors.neusoft.edu.cn/ubuntu-releases/14.04.4/ubuntu

本地使用 docker 快速搭建一个 PHP7.4 学习环境 | Laravel China 社区

原文:本地使用 docker 快速搭建一个 PHP7.4 学习环境 | Laravel China 社区 安装 docker# 安装方法:https://hub.docker.com/?overlay=onboarding 文档手册:https://docs.docker.com/docker-hub/ 安装完成后使用命令查看版本 $ docker --version 下载镜像# 1.拉取需要的镜像# 去 hub.docker.com 拉取需要的镜像 2.查看拉取方法# 3.转到终端界面# 拉取

使Asp.net Core同时支持输出Json/Xml

我们知道Asp.net Core是支持输出为Json格式的.同时也支持输出为xml格式.只要我们正确的配置.并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式. 前几天看Jessite4.0读其日志,又看到这段文字 所有连接加 .json 或 .xml 或增加 __ajax=json 参数,或增加 __ajax=xml 参数,则自动返回 json 或 xml 数据,而不返回视图 于是在想,我们能不能提供下Asp.net Core中这种功能.最笨的办法,当然是在

asp.net core 实现支持多语言

asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一些实践 国际化/本地化介绍 国际化(Globalization)和本地化(Localization)是要实现的多语言支持的基础 Globalization is the process of designing and developing applications that function fo

Linux(Ubuntu)下搭建ASP.NET Core环境

今天来学习一下ASP.NET Core 运行在Ubuntu中.无需安装mono . 环境 Ubuntu 14.04.4 LTS 服务器版 全新安装系统. 下载地址:http://mirrors.neusoft.edu.cn/ubuntu-releases/14.04.4/ubuntu-14.04.4-server-amd64.iso 你也可以下载桌面版安装. 下载地址:http://mirrors.neusoft.edu.cn/ubuntu-releases/14.04.4/ 安装DNVM 首先

USBWebServer 中文便携版 快速搭建 PHP/MySQL 网站服务器环境

如果你是一位 WEB 开发者,或正在学习网页编程,你一定会发现,每到一台新电脑上想要在本地调试测试/运行网站代码都得搭建配置一遍 WAMP (Win.Apache.PHP.MySQL) 环境简直烦透了! USBWebserver 是一款非常好用的傻瓜式本地电脑快速架设PHP网站环境的工具,它最大特色是纯绿色便携,可直接放在U盘里随处运行或通过 Dropbox.百度网盘等同步.它集成了 Apache (httpd).PHP.MySQL 以及 PHPMyAdmin 等组件,支持各种流行的PHP程序如

ASP.NET Core 中的 WebSocket 支持(转自MSDN)

本文介绍 ASP.NET Core 中 WebSocket 的入门方法. WebSocket (RFC 6455) 是一个协议,支持通过 TCP 连接建立持久的双向信道. 它用于从快速实时通信中获益的应用,如聊天.仪表板和游戏应用. 如果不明白什么是WebSocket可以参考这篇文章 系统必备 ASP.NET Core 1.1 或更高版本 支持 ASP.NET Core 的任何操作系统: Windows 7/Windows Server 2008 或更高版本 Linux macOS 如果应用在安

CentOS ASP.NET Core Runtime Jexus跨平台布署

.net core 开源和跨平台,能布署到当前主流的Windows,Linux,macOS 系统上.本篇我们将在 Linux 系统上使用 ASP.NET Core Runtime 和 Jexus 布署运行 ASP.NET Core 网站. Linux 系统选的是 CentOS 7.4 64位 .NET Core 安装的是 ASP.NET Core Runtime 2.1(当时最新),其实也可以安装.NET Core SDK,但没有必需,运行环境 Runtime 就OK了. Jexus 用的是 5

ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别

处于项目需要,我研究了一下web端的语音识别实现.目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整体web应用的开发.最开始我实现了一个web端录好音然后上传服务端进行语音识别的简单demo,但是这种结构太过简单,对浏览器的负担太重,而且响应慢,交互差:后来经过调研,发现微软的语音服务接口是支持流输入的连续识别的,因此开发重点就在于实现前后端的流式传输.参考这位国外大牛写的博文Continuou