快速搭建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.
只需要这几部,.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/"
}
}
}
好了,祝你顺利!
快速搭建CentOS+ASP.NET Core环境支持WebSocket的更多相关文章
- 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
最新教程:http://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环 ...
- ASP.NET Core环境并运行 继续跨平台
ASP.NET Core环境并运行 继续跨平台 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环境 继续.NET跨平台 上一篇:使用VS Code开发ASP.NET Co ...
- 快速搭建Spring Boot + Apache Shiro 环境
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Apache Shiro 介绍及概念 概念:Apache Shiro是一个强大且易用的Java安全框 ...
- 【转】asp.net core环境变量详解
asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境 ...
- 使Asp.net Core同时支持输出Json/Xml
我们知道Asp.net Core是支持输出为Json格式的.同时也支持输出为xml格式.只要我们正确的配置.并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式. 前 ...
- 【Head First Servlets and JSP】笔记6:什么是响应首部 & 快速搭建一个简单的测试环境
搭建简单的测试环境 什么是响应首部 最简单的响应首部——Content-Type 设置响应首部 请求重定向与响应首部 在浏览器中查看Response Headers 1.先快速搭建一个简单的测试环境, ...
- asp.net core 实现支持多语言
asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一 ...
- asp.net core 实现支持自定义 Content-Type
asp.net core 实现支持自定义 Content-Type Intro 我们最近有一个原本是内网的服务要上公网,在公网上有一层 Cloudflare 作为网站的公网流量提供者,CloudFla ...
- Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试
Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...
随机推荐
- [Essay] Apache Flink:十分可靠,一分不差
Apache Flink:十分可靠,一分不差 Apache Flink 的提出背景 我们先从较高的抽象层次上总结当前数据处理方面主要遇到的数据集类型(types of datasets)以及在处理数据 ...
- WEB 小案例 -- 网上书城(二)
寒假结束了,自己的颓废时间同样结束了,早该继续写博客了,尽管我的格式以及内容由于各种原因老被卡,但必须坚持写下去!!! 上次我们对于本案例的数据库部分进行了阐述,这次主要接着上次的内容分享本案例的翻页 ...
- Django使用模板后无法找到静态资源文件
Django使用模板后无法找到静态资源文件 环境配置 Django版本1.11 python版本3.6.2 前言 在编写Django网站的时候,在涉及模板方面,一些简单的例子都没有问题,但这些例子都有 ...
- 修改MyEclipse编辑框背景色
修改MyEclipse编辑框背景色 1.未修改之前,编辑框背景色 2.依次操作,"Window--->Preferences" 3.选择"General---> ...
- Java中的List转换成JSON报错(三)
1.错误描述 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher a ...
- windows驱动程序wdf--KMDF大致框架
继WDM后微软出了WDF,封装了WDM中的一些基本代码逻辑.本人菜鸟,也不知道本质上有何区别,只觉得是多了Wdf开头的函数,基本的编程框架上有点出入. KMDF是WDF的内核级部分,为了理清KMDF的 ...
- css属性详解
一.字体属性 字体 font-family可以把多个字体名称作为一个“回退”系统来保存.如果浏览器不支持第一个字体,则会尝试下一个.浏览器会使用它可识别的第一个值. body { font-famil ...
- Nginx 原理解析和配置摘要
前言 Nginx 作为高性能的 http 服务器,知名度不必多言,相似产品中无出其右.本篇随笔记录我认为较为重要的原理和配置. 1. 原理解析 1.1 结构 以上是 Nginx 的结构图,其包含一个 ...
- class-决策树Decision Tree
顾名思义,决策树model是树形结构,在分类中,表示基于特征对实例进行分类的过程.可以认为是"if-else"的合集,也可以认为是特征空间,类空间上条件概率分布.主要优点是分类速度 ...
- 关于html5 data-*自定义属性相关注意点和踩过的坑
在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,命名可以用驼峰命名方式,但取值是必需全部使用小写(后面会说),使用这样的结构可以进行数 ...