快速搭建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协议) 下载地址 ...
随机推荐
- MongoDB的DBREF 使用.
首先要记一下根据 DBREF 的ObjectId 以及根据 ref 集合为条件查询问题. 在不同的可视化客户端里面显示的问题. //某客户端显示这样,直接CMD查询也是这样显示.这样我无法看懂find ...
- ANTD mobile源码分析 -- popover
最近的开发中要用到很多的各式各样的组件.但是发现ant design mobile(后面简称ANTDM)里很多的资源.于是就分析一下,学习学习. ANTDM直接使用了typescript,没有用ES2 ...
- C#调用WebService时插入cookie
SOAPUI插入Cookie的方法 SOAP插入cookie的方法如下,点击Head,点击加号,然后直接设置就可以了. C#中调用webService时插入Cookie 由于调用的时候必须要带上coo ...
- Oracle安装、Navicat for Oracle、JDBCl连接、获取表结构
Oracle安装 Navicat for Oracle配置 Oracle JDBC连接(增删改查) Oracle安装 环境windows 7 64位 安装版本:oracle 11g(64位) 下载地址 ...
- HashMap并发导致死循环 CurrentHashMap
为何出现死循环简要说明 HashMap闭环的详细原因 cocurrentHashMap的底层机制 为何出现死循环简要说明 HashMap是非线程安全的,在并发场景中如果不保持足够的同步,就有可能在执行 ...
- 我的Java设计模式-单例模式
就算不懂设计模式的兄弟姐妹们,想必也听说过单例模式,并且在项目中也会用上.但是,真正理解和熟悉单例模式的人有几个呢?接下来我们一起来学习设计模式中最简单的模式之一--单例模式 一.为什么叫单例模式? ...
- 了解c3p0,dbcp与druid
说到druid,这个是在开源中国开源项目中看到的,说是比较好的数据连接池.于是乎就看看.扯淡就到这. 下面就讲讲用的比较多的数据库连接池.(其实我最先接触的是dbcp这个) 1)DBCP DBCP是一 ...
- Linux开机启动图片修改
Linux启动时会在屏幕上显示一个默认的开机图片,我们可以修改成为自己的图片,需要做以下工作 软件gimp下载地址:http://www.rayfile.com/zh-cn/files/0bb556b ...
- freemarker自定义标签报错(八)
1.错误描述 freemarker.core.ParseException: Token manager error: freemarker.core.TokenMgrError: Unknown d ...
- DirectShow学习笔记总结
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,9.0之前 ...