关于 Websockets

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 Websockets相关的知识,希望对你有一定的参考价值。

参考技术A

一些参考内容:

用户的需求通常是: 希望web页面更具交互性. 而解决方案就是使用javascript. 而这一切的推动力又是Ajax.

Ajax是异步javascript和xml的缩写(Asynchronous Javascript and XML), 利用这种技术, 可以让远程服务器和客户端保持数据同步. 但在这个机制中XML并非必须的, 它只是作为数据传递的载体, 实际很多时候是使用JSON来进行传递(很多时候又叫AJAJ).

使用Ajax的最大好处是: 客户端不必刷新整个页面就可以实现同服务器的数据交换, 而这种交换对于用户来说可以是透明的.

但这样也造成一个难题: 由于客户端是主动从服务器获取新数据, 但客户端怎么获知数据的更新呢?

过去14年间(2000年开始算起), 针对上面的问题, 出现了各种各样的解决方案.

主要有四种形式的解决办法:

1999年的时候, 在HTTP1.1规范内就提供了一种功能, 可以用在任何HTTP数据交流过程中的功能, 叫做HTTP Upgrade.

作用原理如下:

HTTP Upgrade最好的地方是: 指定的协议几乎可以是任意的. 当HTTP握手结束后就会释放掉之前的HTTP连接. 理论上讲, 使用HTTP Upgrade, 可以建立起任意的两端点间的任意TCP Socket连接(甚至可以是持久的, 全双工的TCP socket连接), 并且连接上工作的协议可以是你自己设计的.

当然, 浏览器不可能将客户端程序员推入到TCP协议栈的深渊让他们自己针对HTTP Upgrade开发自己的协议. 所以由专门机构开发了一些协议出来, 而WebSockets协议正是其中之一.

WebSocket连接的建立过程:

使用WebSocket协议的好处很多, 主要和它的实现有关:

虽然原理很复杂, 但是已经有现成的API了, 要做的就是在上面构建你自己的应用即可...

而WebSocket的API又分为客户端API和服务端API. 不同点只是对不同工作内容的支持不同而已.

用途基本上没有任何限制, 比如浏览器应用, 以及任何支持平台上的客户端应用.下面是一些典型用途:

和HTTP协议一样, 由于是信息交流的规范或标准. 所以使用WebSocket建立的不同应用理论上说都可以相互通信, 不管是哪个平台, 什么类型的.

正是因为如此, 所以大多数WebSocket的实现中都将自己分为客户端和服务器端工具两个部分. 比如Java或.net.

而Javascript中只是有客户端工具的部分, 因为它本身就是用作客户端脚本的.

下面先来使用JavaScript的客户端工具建立客户端, 然后再转到Java的服务端(当然Java也有客户端的API,只是使用Java实现客户端还是交给android中去吧...)

W3C规定将浏览器中的WebSocket支持接口作为html5的扩展. 故虽然使用的是Javascript来实现WebSocket的交流, 但实际上WebSocket接口是HTML5的组成部分.任何浏览器都可以通过WebSocket接口的implementation来实现WebSocket通信.(早期的Ajax通信则是不同浏览器有不同的类和不同的方法来做Ajax请求, 比起现在可以说复杂很多)

下面就来建立客户端.

WebSocket API是从Java EE7开始加入进来的, 在规范JSR 356可以查到.

它里面包含了客户端以及服务端的API.

客户端API是基础API: 包含了一个WebSocket端所必须的基本类和接口(在javax.websocket包中).

服务端API: 建立在客户端API之上并对客户端API进行了扩展(javax.websocket.server包中).

所以针对Java的WebSocket API, 有两大部分组件: 仅用于客户端的API或完整版API(服务端API).

API的详细使用需要查看Java EE7的API文档.

下面分别来看看这两个部分的API.

关于Tomcat中WebSocket连接数的限制, 实际就是TCP连接的最大数目:

TO reach the max alive websocket connection in Tomcat, following config changes need to be done.

Change this to from 50 till 65535.

The above configuration changes allows around ~50k live connections in a 2GB Intel Core i5 machine provided the server and client are running in different machines.

下面是一些连接数限制的尝试:

https://blog.krecan.net/2010/05/02/cool-tomcat-is-able-to-handle-more-than-13000-concurrent-connections/

http://grokbase.com/t/tomcat/users/132d14c1q0/achieve-large-number-of-concurrent-websocket-connections-40000-50000

https://github.com/rstoyanchev/spring-websocket-portfolio/issues/52

https://support.appharbor.com/discussions/problems/26648-websockets-max-concurrent-connections-request-queue-limit

https://mrotaru.wordpress.com/2013/10/10/scaling-to-12-million-concurrent-connections-how-migratorydata-did-it/ 经典做法

以上是关于关于 Websockets的主要内容,如果未能解决你的问题,请参考以下文章

scrapy 关于 rule, 关于多页

JS学习笔记关于选项卡,关于this,关于innerHTML

关于唯典冰淇淋新闻页的布局

关于prototype.js的一些技术说明

主页链接发送到关于/关于页面无法回家

关于写作