分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

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

发布时间:2023-09-06 01:26责任编辑:苏小强关键词:.NETWeb

以前用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.ascsudo 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 updatesudo yum install libunwind libicusudo yum install dotnet-sdk-2.1.101

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

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

dotnet new web -o wstestdotnet build wstestdotnet 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/" ???} ?}}

好了,祝你顺利!

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved