关于 Websockets

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

一些参考内容:

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
优特美尔电子
2024-11-20 广告
优特美尔商城是深圳市优特美尔电子有限公司所属的一站式电子元器件采购平台, 依托创始人在电子元器件18年的积累,目前平台汇集了近 3000家品牌供应商、近3000万现货SKU,海内外注册用户超过3万,日均询单2000+。 优特美尔商城基于货源... 点击进入详情页
本回答由优特美尔电子提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式