快速搭建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协议) 下载地址 ...
随机推荐
- SpringMvc Json LocalDateTime 互转,form urlencoded @ModelAttribute 转换
JDK8 的LocalDate 系列日期API ,比Date 或者 Calendar 都好用很多,但是在SpringMvc 自动装配会有点小问题 会导致抛出类似异常 default message [ ...
- 【java学习笔记】Properties
Properties:可以持久化的映射,规定键和值的类型是String. Properties对象必须放到.properties文件中,其中properties文件默认为西欧编码,也因此不存储中文. ...
- 修改或隐藏Nginx的版本号
隐藏版本号 隐藏nginx的版本号很简单,nginx的HttpCoreModule提供了一条叫做server_tokens指令,我这要将这条指令设置为“server_tokens off”就可以了. ...
- Oracle连接出错(一)
1.错误描述 java.sql.SQLException: ORA-0064:error occurred at recursive SQL level 1. ORA-06153:unable to ...
- .Net4.0 任务(Task)
任务(Task)是一个管理并行工作单元的轻量级对象.它通过使用CLR的线程池来避免启动专用线程,可以更有效率的利用线程池.System.Threading.Tasks 命名空间下任务相关类一览: 类 ...
- HTML5图片居中的问题
刚开始接触html5,准备写一些网页,但是学习的过程中遇到了图片不能居中的问题,首先来看看,代码和执行效果: <!DOCTYPE html> <html> <head&g ...
- firewall服务配置
/* Border styles */ #table-2 thead, #table-2 tr { border-top-width: 1px; border-top-style: solid; bo ...
- Unity开发之实现更换鼠标图片
在玩游戏的时候,感觉游戏里的鼠标图片特酷炫,23333,今天我就总结了两种方法! 我是做Unity开发的,所以方法仅针对于Unity平台........ 方法如下: 1.Unity客户端直接更改,步骤 ...
- I Hate It HDU - 1754
很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...
- iOS - Bluetooth 蓝牙
1.蓝牙介绍 具体讲解见 蓝牙 技术信息 蓝牙协议栈 2.iBeacon 具体讲解见 Beacon iBeacon 是苹果公司 2013 年 9 月发布的移动设备用 OS(iOS7)上配备的新功能.其 ...