快速搭建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,一经查实,立即删除!

相关文章

博客文章列表(一)——JAVA

一、成长系列 面试 详情列表 编程难题 详情列表 java总结 详情列表 java技能 详情列表 java面…

Cube Or 北方大学生训练赛

Cube Or Time Limit: 2000/2000 MS(Java/Others) Memory Limit: 262144/262144 K(Java/Others) Problem Description : Given you N Integers ai (1≤i≤N) , you can do thefollowing operation: pick out …

牛客-沙漠点列【tarjan】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101#question 题目大意 nnn个点mmm条边的沙漠(所有联通子图都是仙人掌)&#xff0c;删除kkk个点使得剩下的连通块最多。 解题思路 对于图上的每条割边&#xff0c;删去之后就可以多出一个联通块&#xff0c;所以我们就可…

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

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

博客文章列表(二)——算法、数据结构、数据库、ABCD

七、编程基础 数据结构 详情列表 算法 详情列表 算法.排序 详情列表 算法.加密 详情列…

A*B NTT快速数论变换

wmq的AB Problem 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 3000ms 内存限制: 512M 描述 这是一个非常简单的问题。 wmq如今开始学习乘法了&#xff01;他为了训练自己的乘法计算能力&#xff0c;写出了n个整数&#xff0c;并且对每两个数a,…

51nod-猴猴吃苹果【线段树】

正题 题目链接:https://www.51nod.com/Contest/ProblemList.html#contestId188&randomCode291765 题目大意 nnn个点的一棵树&#xff0c;从kkk节点出发&#xff0c;每次走到最远的一个节点(路上点最多,如果有多个就编号最小的)并将路上的点权变为0&#xff0c;求会依次到达…

北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A

题目描述 XCX最近迷上了玩蜘蛛牌。蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏&#xff0c;游戏规则是这样的&#xff1a;只能将牌拖到比它大一的牌上面&#xff08;A最小&#xff0c;K最大&#xff09;&#xff0c;如果拖动的牌上有按顺序排好的牌时&#xff0c;那么这些牌也…

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开发…

51nod-猴猴吃香蕉【dp】

正题 题目链接:https://www.51nod.com/Contest/Problem.html#contestProblemId1149 题目大意 nnn个数&#xff0c;求有多少种选择方案使选择的数乘机为kkk。 解题思路 显然kkk的质因数最多只有999个&#xff0c;我们将质因数进行dpdpdp。若选择的数的质因数刚好是kkk的质因数…

北方大学 ACM 多校训练赛 第十五场 数字游戏

本题的意思是&#xff0c;给你1/2&#xff0c;1/2&#xff0c;1&#xff0c;2&#xff0c;4……2^&#xff08;k-1&#xff09; &#xff0c;让你在左边的数列中添加号或者-号&#xff0c;使得最终的答案为n即可。 思路&#xff1a; 我们知道上面这些数直接如果全部都填号的话…

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

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

51nod-猴猴的比赛【莫队,线段树】

正题 题目链接:https://www.51nod.com/Contest/Problem.html#contestProblemId1150 题目大意 给出两颗nnn个点的树&#xff0c;求有多少个点(i,j)(i,j)(i,j)对使得在两棵树中iii都是jjj的祖先。 解题思路 在dfsdfsdfs序中一个节点的孩子是在一个连续的区间中的。所以对于第一…

北方大学 ACM 多校训练赛 第十五场 买花

显然是一个比较简单的离线查询问题。 本质上是对区间求集合的问题&#xff0c;按照区间右端点从小到大对区间进行排序&#xff0c;然后用一个指针curr表示当前正在考虑区间的最右侧位置&#xff0c;针对排好序区间[tarl,tarr]&#xff0c;先查看curr是否到达tarr&#xff0c;如…

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

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

P4343-[SHOI2015]自动刷题机【二分答案】

正题 题目链接:https://www.luogu.org/problem/P4343 题目大意 nnn个操作每个操作加几行代码或减几行代码&#xff0c;若代码积累到xxx行就自动删除所有代码并切掉一道题。 已知道切掉了kkk题&#xff0c;求最大和最小的xxx 解题思路 因为xxx和切题的数量单调&#xff0c;所…

北方大学 ACM 多校训练赛 第十五场 欢度6.18

把式子变成a[i]1 p(a[i-1]1)q[a[i-2]1]&#xff0c;矩阵快速幂搞定。复杂度o(logn) #include <iostream> #include <cstdio> using namespace std; #define int long long int x,y,p,q,n; const int MOD 1000000007;int fast_mod(int n) // 求 (t^n)%MOD {i…

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

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

P5253-丢番图【数论】

正题 题目链接:https://www.luogu.org/problem/P5253 题目大意 给一个nnn&#xff0c;求有多少对x,y(x≤y)x,y(x\leq y)x,y(x≤y)使得 1x1y1n\frac{1}{x}\frac{1}{y}\frac{1}{n}x1​y1​n1​ 解题思路 xyxy1n\frac{xy}{xy}\frac{1}{n}xyxy​n1​ n(xy)xyn(xy)xyn(xy)xy xy−n…

最小费用购物问题

西安交大 软件53 蔡少斐 题号&#xff1a;3_14 题目叙述&#xff1a; 某商店中每种商品都有一个价格。例如&#xff0c;一朵花的价格是2 ICU(ICU 是信息学竞赛的货币的单位&#xff09;;一个花瓶的价格是5 ICU。为了吸引更多的顾客&#xff0c;商店提供了特殊优惠价。 特殊优…