关于 Websockets

 我来答
天然槑17
2022-06-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6410
采纳率:100%
帮助的人:36.4万
展开全部

一些参考内容:

用户的需求通常是: 希望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/ 经典做法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式