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 文档网站。
本文翻译自:
Windows Azure 网站上的 WebSocket 简介的更多相关文章
- 在 Windows Azure 网站上使用 Django、Python 和 MySQL:创建博客应用程序
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 根据您编写的应用程序,Windows Azure 网站上的基本Python 堆 ...
- Windows Azure 网站上的 WordPress 3.8
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 和 Windows Azure 网站开发人员体验合作伙伴共同撰写. WordPr ...
- 删除 Windows Azure 网站上的标准服务器头
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 请求和响应中包含的 HTTP 头是Web 服务器和浏览器之间的 HTTP 通信过程的一部分.例 ...
- 在 Windows Azure 网站 (WAWS) 上对 Orchard CMS 使用 Azure 缓存
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 撰写. 如果您当前的 OrchardCMS 网站在 Windows Azure 网站 ...
- Windows Azure 网站:应用程序字符串和连接字符串的工作原理
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的 ...
- Windows Azure 网站 (WAWS) 中的服务器端包含 (SSI)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Erez Benari 撰写. Windows Azure 网站客户普遍关心的一个问题是关于我们对服务器端包含(Server ...
- 使用 IIS Manager 对 Windows Azure 网站进行远程管理
最近,我们为客户新增了使用 Windows自带的 IIS管理控制台管理 Azure网站的功能.IIS Manager支持 HTTP over SSL,提供到您的 Windows Azure 网站 ...
- 最佳实践:Windows Azure 网站 (WAWS)
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Sunitha Muthukrishna 撰写. Windows Azure 网站 (WAWS) 允许您在 Windows ...
- 进一步探索:Windows Azure 网站中解锁的配置选项
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站 (WAWS) 中管理网站时,许多选项可使用 Azu ...
随机推荐
- Mac经常使用快捷键
Mac使用快捷键会节省非常多时间.使用最多的键就是shift键 option键 command键的组合了.当然一下略微用得多一点点,还有非常多快捷键没一一列举了 进入指定文件夹的一些快捷键 进入 A ...
- 对JAVA Bean使用PropertyDescriptor反射调用JAVA方法
对于符合JAVA Bean规范的bean,调用其方法应优先使用java.beans.PropertyDescriptor获取Method进行方法调用,以获得更大的可维护性. 示比例如以下: NonCo ...
- C#中数组、ArrayList和List三者的区别(转)
好东西,总结的很到位,收藏了! 源地址:http://blog.csdn.net/zhang_xinxiu/article/details/8657431
- PKU POJ 1006 Biorhythms (中国剩余定理)
中国剩余定理 x = ai (mod mi) ai和mi是一组数,mi两两互质,求x 令Mi = m1*m2*~mk 其中,mi不包含在内. 因为mi两两互质,所以存在x和y, st M ...
- 利用 squid 反向代理提高网站性能
http://www.ibm.com/developerworks/cn/linux/l-cn-squid/ http://www.squid-cache.org/ http://www.beijin ...
- 系统变量写在.bash_profile和.bashrc的区别
今天配置一个代理,正儿八经的把我搞蒙了,不就是export http_porxy=xxx.xxx.xxx.xxx:xxxx 然后重启服务service network restart ,依然连接不了外 ...
- X509Certificate2 本地正常,放到线上内部错误
iis 找到部署的站点应用连接池,右键高级设置,找到“加载用户配置文件”改为true.window service2008 默认为false的.
- Android系统智能指针的设计思路(轻量级指针、强指针、弱指针)
本博客为原创,转载请注明出处,谢谢. 参考博文:Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 C++中最容易出错的地方莫过于指针了,指针问题主要有两类,一是内存泄露,二是无 ...
- 转: 关于viewport的理解
最近我做了一点儿针对手机的Web开发和相关研究.按说,Web自设计之初,就已经考虑了设备无关性.然而,现实总是不尽如人意. 我们知道大多数网页都是针对桌面显示器开发和测试的,但是手机屏幕通常要比桌面显 ...
- HDU 1286 找新朋友
题解:分析题目,就是一个裸的欧拉函数,于是AC. #include <cstdio> int eular(int n){ int ret=1,i; for(i=2;i*i<=n;i+ ...