当前位置: 首页 > news >正文

Windows Azure 网站上的 WebSocket 简介

编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写。

Windows Azure 网站最近新增了对 WebSocket 协议的支持。.NET 开发人员和 node.js 开发人员现在可在其应用程序中启用 WebSocket 并加以利用。

网站的 Configuration 选项卡上有一个新的选项,用于为应用程序提供 WebSocket 支持。

 

为网站启用 WebSocket 后,ASP.NET(v4.5 及更高版本)和 node.js 开发人员便可将各自框架的库和 API 与 WebSocket 配合使用。

ASP.NET SignalR聊天示例

SignalR 是一个用于构建实时 Web 应用程序的开源 .NET 库,这些 Web 应用程序需要实时 HTTP 连接才能传输数据。我们提供了一个很棒的站点,其中包含有关 SignalR 库的介绍性文章和详细信息。

由于 SignalR 本身支持将 WebSocket 作为协议,因此 SignalR 是在 Windows Azure 网站上运行连网 Web 应用程序的绝佳选择。例如,您可以在 Windows Azure 网站上运行此示例聊天应用程序

以下快照显示了 SignalR 聊天示例的结构:

在 Windows Azure 网站中创建 Web 应用程序、为应用程序启用 WebSocket 并上传 SignalR 聊天示例之后,即可在 Windows Azure 网站上运行自己专属的迷你聊天室!

Fiddler 的原始 HTTP 跟踪(如下所示)显示了 SignalR 客户端发送的 WebSocket 协议升级请求如何与 Web 服务器协商 WebSocket 连接:

Request snippet:
GET 

https://sigr-chat-on-waws.xxxx.net/signalr/connect?transport=webSocketssnip HTTP/1.1
Origin:https://sigr-chat-on-waws.xxxx.net
Sec-WebSocket-Key:hv2icF/iR1gvF3h+WKBZIw==
Connection:Upgrade
Upgrade:Websocket
Sec-WebSocket-Version:13

Response snippet:
HTTP/1.1 101 Switching Protocols
Upgrade:Websocket
Server:Microsoft-IIS/8.0
X-Content-Type-Options:nosniff
X-Powered-By:ASP.NET
Sec-WebSocket-Accept:Zb4I6w0esmTDHM2nSpndA+noIvc=
Connection:Upgrade

要了解有关利用 SignalR 构建实时 Web 应用程序的更多信息,请参阅 SignalR 概述网站上的扩展教程

ASP.NET Echo 示例

ASP.NET 自 .NET Framework v4.5 起即为 WebSocket 提供支持。开发人员通常希望使用更高级别的库(如 SignalR),以封装管理 WebSocket 连接的低级别详细信息。但是,对于勇于探索的开发人员,本节显示了一个在 ASP.NET 中使用低级别 WebSocket 支持的简短示例。

ASP.NET Echo 示例项目包含一个可侦听并响应 WebSocket 的服务器端 .ashx 处理程序和一个可建立 WebSocket 连接并将文本发送到服务器的简单 HTML 页面。

.ashx 处理程序可侦听 WebSocket 连接请求:

.ashx 处理程序可侦听 WebSocket 连接请求:

建立 WebSocket 连接后,处理程序会将文本返回到浏览器:

对应的 HTML 页面将在加载页面时建立 WebSocket 连接。当浏览器用户通过 WebSocket 连接发送文本时,ASP.NET 会返回输入的文本。

以下快照显示了一个浏览器会话,返回了输入的文本然后关闭WebSocket 连接。

Node.js 基本聊天示例

Node.js 开发人员对于使用 socket.io 库编写需要长时间运行的 HTTP 连接的网页非常熟悉。socket.io 支持将 WebSocket(及其他选项)作为网络协议,并且可将其配置为使用 WebSocket 进行传输(如果可用)。

Node.js 应用程序应该包括 socket.io 模块,然后在代码中配置socket:

如下所示的示例代码可侦听要使用昵称(例如聊天处理)连接的客户端,并将聊天消息广播到当前连接的所有客户端。

在 web.config 中,使用 WebSocket 的 node.js 应用程序需要进行以下小调整:

该web.config 条目将关闭 IIS WebSocket 支持模块 (iiswsock.dll),因为 node.js 不需要此模块。IIS 上的 nodej.js 包括自己的低级别 WebSocket 实现,这正是需要关闭 IIS 支持模块的原因所在。

但请记住,仍需使用本文先前所示的 UI 中的 Configuration 门户选项卡为您的网站启用 WebSocket 功能。

如果两个客户端均已连接并且已使用示例 node.js 应用程序交换消息,HTML 输出将如下所示:

Fiddler 的原始 HTTP 跟踪(如下所示)显示了 socket.io 客户端发送的 WebSocket 协议升级请求如何与 Web 服务器协商 WebSocket 连接:

Request snippet:
GET

https://abc123.azurewebsites.net/socket.io/1/websocket/11757107011524818642HTTP/1.1
Origin:https://abc123.azurewebsites.net
Sec-WebSocket-Key:rncnx5pFjLGDxytcDkRgZg==
Connection:Upgrade
Upgrade:Websocket
Sec-WebSocket-Version:13

Response snippet:
HTTP/1.1 101 Switching Protocols
Upgrade:Websocket
Server:Microsoft-IIS/8.0
X-Powered-By:ASP.NET
Sec-WebSocket-Accept:jIxAr5XJsk8rxjUZkadPWL9ztWE=
Connection:Upgrade

WebSocket 连接限制

当前,Azure 网站已对每个运行的网站实例支持的并发 WebSocket 连接数实施限制。每种伸缩模式下每个网站实例支持的 WebSocket 连接数如下所示:

·   免费:每个网站实例支持 (5) 个并发连接

·   共享:每个网站实例支持 (35) 个并发连接

·   标准:每个网站实例支持 (350) 个并发连接

如果您的应用程序试图打开超过允许限制的 WebSocket 连接,Windows Azure 网站将返回 503 HTTP 错误状态代码。

注意:术语“网站实例”指的是,如果您的网站调整为在 (2) 个实例上运行,则计为 (2) 个运行的网站实例。

您可能需要对 WebSocket 使用 SSL!

当使用 WebSocket 时,开发人员需要牢记一点。WebSocket 协议依赖于某些不常用的 HTTP 头,尤其是Upgrade头,因此中间网络设备(如 Web 代理)将这些头剔除并不足为奇。最终的结果通常让开发人员灰心丧气且满腹疑问:WebSocket 应用程序为何不运行,或不选择 WebSocket,却反而选择了效率更低的替代解决方案。

解决此问题的窍门是通过 SSL 建立 WebSocket 连接。要完成此操作,请执行以下两个步骤:

·   针对 WebSocket 端点使用 wss:// 协议标识符。例如,不要连接到 ws://mytestapp.azurewebsites.net(通过 HTTP 的 WebSocket),而要连接到 wss://mytestapp.azurewebsites.net(通过 HTTPS 的 WebSocket)。

·   (可选)同时通过 SSL 运行使用WebSocket的页面。有时不需要执行此操作,但根据您使用的客户端框架,对包含 HTML 页面的 SSL 设置可能会使 WebSocket 连接具备 SSL 功能。

Windows Azure 网站通过使用 *.azurewebsites.net 的默认 SSL 证书为 SSL 提供支持,甚至包括在免费站点上。因此,您无需配置自己的 SSL 证书来解决此问题。对于 azurewebsites.net 下的 WebSocket 端点,您只需要切换为使用 SSL,此时将自动使用 *.azurewebsites.net 通配符 SSL 证书。

您还可以为网站注册自定义域,然后配置站点的 SNI 证书或基于 IP 的 SSL 证书。有关配置自定义域以及 Windows Azure 网站的 SSL 证书的详细信息,请参考 Windows Azure 文档网站。

本文翻译自:

http://blogs.msdn.com/b/windowsazure/archive/2013/11/14/introduction-to-websockets-on-windows-azure-web-sites.aspx

 

 

 

转载于:https://www.cnblogs.com/sesexxoo/p/6191091.html

相关文章:

  • 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(三)命令行工具集
  • 浅谈硬盘构造及IOPS的计算
  • 把用户加入sudo
  • 点滴积累【JS】---JS小功能(button选择颜色)
  • Nginx、LVS及HAProxy负载均衡软件的优缺点详解
  • 面向对象实验四(输入输出流)
  • 苹果屏幕分辨力和像素
  • db2还原离线备份文件报错SQL2071N 提示“访问共享库出现错误”解决
  • 动手实现Handler v1.3
  • pam_access.so
  • Http中header与body的区别
  • windows 下安装jdk
  • Hadoop HDFS Hive HBase关系图
  • 蕾丝 | 内外皆精致的女子
  • 数据恢复软件(三):浴室追凶(代码讲解版)
  • SegmentFault for Android 3.0 发布
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • flask接收请求并推入栈
  • golang 发送GET和POST示例
  • HashMap ConcurrentHashMap
  • mongodb--安装和初步使用教程
  • Netty 4.1 源代码学习:线程模型
  • Spark学习笔记之相关记录
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 对象管理器(defineProperty)学习笔记
  • 分享一份非常强势的Android面试题
  • 面试总结JavaScript篇
  • 前嗅ForeSpider教程:创建模板
  • 深度学习入门:10门免费线上课程推荐
  • 我感觉这是史上最牛的防sql注入方法类
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • (007)XHTML文档之标题——h1~h6
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (四)图像的%2线性拉伸
  • (译) 函数式 JS #1:简介
  • (转)Linux下编译安装log4cxx
  • .dwp和.webpart的区别
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net core 6.0 升8.0
  • .NET 表达式计算:Expression Evaluator
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .考试倒计时43天!来提分啦!
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @JoinTable会自动删除关联表的数据
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • [IE编程] WebBrowser控件中设置页面的缩放
  • [Java] IDEA Scala环境搭建
  • [Jquery] 实现温度计动画效果
  • [LaTex]arXiv投稿攻略——jpg/png转pdf
  • [mmucache]-ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲