快速搭建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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor &#xff0c;将.NET带回到浏览器.这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东…

dotnet watch+vs code提升asp.net core开发效率

在园子中&#xff0c;已经又前辈介绍过dotnet watch的用法&#xff0c;但是是基于asp.net core 1.0的较老版本来讲解的&#xff0c;在asp.net core 2.0的今天&#xff0c;部分用法已经不太一样&#xff0c;所以就再写一篇文章来介绍dotnet watch vs code来提升asp.net core开发…

ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

没有采用gitlab&#xff0c;因为gitlab比较吃配置。也比较重&#xff0c;用不到那么多功能。采用go语言开发的gogs来代替。免费HTTPS证书安装Gogs (一个gitserver&#xff0c;类似于gitlab)安装DockerDocker配置加速器 一定要配置&#xff0c;用官方的源会让你体会到什么叫做绝…

使用CoreRT将.NET Core发布为Native应用程序

在上一篇文章《使用.NET Core快速开发一个较正规的命令行应用程序》中我们看到了使用自包含方式发布的.NET Core应用中包含了216个文件。我就写一个cat命令用得着这么动真格。。。这写出来的命令行还有人用吗&#xff1f;今天我们就来介绍一下MS的另一个开源项目CoreRT。用来解…

.NET Core 2.1预览版首次引入Global Tools

Global Tools是.NET Core 2.1预览版中其中一个初次出现的特性。Global Tools提供了一种方法&#xff0c;让开发人员编写的.NET Core应用可以打包成NuGet包交付。如果.NET Core运行在目标平台上&#xff0c;那么一个恰当打包的Global Tool就可以在那上面运行。JavaScript开发人员…

开源服务容错处理库Polly使用文档

在进入SOA之后&#xff0c;我们的代码从本地方法调用变成了跨机器的通信。任何一个新技术的引入都会为我们解决特定的问题&#xff0c;都会带来一些新的问题。比如网络故障、依赖服务崩溃、超时、服务器内存与CPU等其它问题。正是因为这些问题无法避免&#xff0c;所以我们在进…

大部分Intel hardware intrinsic 将在 .NET Core 2.1 中启用

编者注&#xff1a;SIMD via C# 引入了一套全新的机制&#xff0c;使得C# 以后可以像C/C 一样直接使用intrinsic functions 来直接操作Intel CPU 的大多数SIMD 指令了&#xff08;从SSE 到AVX2&#xff09;随着 .NET Core 2.1 发布的临近&#xff0c;上周CoreCLR 已经停止向mas…

运动员最佳配对问题

西安交大 软件53 蔡少斐 题号&#xff1a;6_5 题目叙述&#xff1a; 羽毛球队有男女运动员各n人。 给定2个nn矩阵P和Q。P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势&#xff1b;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势。 由于技术配合…

TensorflowSharp 简单使用与KNN识别MNIST流程

机器学习是时下非常流行的话题&#xff0c;而Tensorflow是机器学习中最有名的工具包。TensorflowSharp是Tensorflow的C#语言表述。本文会对TensorflowSharp的使用进行一个简单的介绍。本文会先介绍Tensorflow的一些基本概念&#xff0c;然后实现一些基本操作例如数字相加等运算…

刷题bingo挑战赛1

前言 为了提高做题效率&#xff0c;最近发现了个玩bingo的好网站 https://bingosync.com 然后就有了这场bingobingobingo赛。 正题 生成代码 [ {"name":"P2638"},{"name":"P4265"},{"name":"P2331"},{"n…

ASP.NET Core Web 支付功能接入 微信-扫码支付篇

这篇文章将介绍ASP.NET Core中使用 开源项目 Payment&#xff0c;实现接入微信-扫码支付及异步通知功能。开发环境&#xff1a;Win 10 x64、VS2017 15.6.4、.NET Core SDK 2.1.101、.NET Core Runtime 2.0.61.新建"ASP.NET Core Web 应用程序"项目&#xff0c;我将它…

14、java中的集合(1)

1、为什么使用集合 面向对象语言使用对象体现事物&#xff0c;存储对象可以使用数组&#xff0c;但是数组的长度是固定的&#xff0c;存储的对象类型单一&#xff0c;不适用需求的变化&#xff0c;所以提供了集合。 2、集合和数组的区别 1&#xff09;数组长度定义之后不能改…

Microsoft AI - Custom Vision in C#

概述前面一篇 Microsoft AI - Custom Vision 中&#xff0c;我们介绍了 Azure 认知服务中的自定义影像服务&#xff1a;Custom Vision&#xff0c;也介绍了如果通过这个在线服务&#xff0c;可视化的完成项目创建、数据集上传和标注、模型训练、模型评估和测试。我们也提到&…

Unity引擎及编辑器C#源代码发布

3月23日我们在GitHub上发布了Unity引擎和编辑器的C#源代码&#xff0c;仅供Unity学习参考使用。为何如此决定为了了解或改进自己的Unity项目&#xff0c;一直以来有用户对Unity .NET程序集反汇编&#xff0c;我们的服务条款明确允许这样做。但反汇编有二大缺点&#xff1a;尽管…

k8s实战为aspnetcore.webapi微服务注入配置信息

1、浅析k8s配置信息Secret以密文的形式存储数据&#xff0c;可以用来保存一些敏感信息&#xff0c;例如&#xff1a;OAuth tokens、私钥、密码、数据库连接、事件总线连接等。ConfigMap以明文的形式存储数据&#xff0c;可以用来保存一些非敏感信息&#xff0c;例如&#xff1a…

10、mysql数据表中数据的查询(2)

介绍一下mysql中查询的重中之重&#xff0c;连接查询 创建student和teacher表&#xff0c;表中数据如下&#xff1a; studentteacher 交叉连接查询 查询结果是连接的几个表中满足条件的相关联的数据的交集 sql SELECT s.id sid, s.name sname , t.id tid ,t.name tname FRO…

微软将人工智能嵌入Windows 10更新

下一轮Windows 10更新为Windows应用程序与人工智能功能的集成提供了新途径&#xff0c;将直接令数以亿计的个人电脑、平板、IoT边缘设备等Windows设备受益。新版Windows ML平台可供开发者直接通过Visual Studio将预先训练好的深度学习模型与自己的应用程序集成&#xff0c;在导…

24、mysql连接线程的show和kill

1、登陆到mysql服务器 Mysql –h ip –u 用户名 –p 密码; 2、检查当前连接的线程 show full processlist 或 show processlist 或 selelct * from information_schema.processlist; Id&#xff1a;线程标识 User&#xff1a;当前用户 Host&#xff1a;sql的来源&#xff0c;i…

ASP.NET Core MVC 2.1 顶级参数验证

本文讨论ASP.NET Core 2.1中与ASP.NET Core MVC / Web API控制器中的模型绑定相关的功能。虽说这是一个功能&#xff0c;但从我的角度来看&#xff0c;它更像是一个错误修复&#xff01;请注意&#xff0c;我使用的是 NET Core 2.1 Preview 1&#xff0c;正式版发布后&#xff…

.net core2.0下Ioc容器Autofac使用

Autofac基本使用Autofac是一款轻量级的IOC框架&#xff0c;使用率上还是挺高的&#xff0c;官方网站http://autofac.org&#xff0c;源码下载地址https://github.com/autofac/Autofac。下面以狗的列子来介绍autofac&#xff0c;nuget搜索Autofac进行安装public interface IDog{…