【20年品牌建站】找北京网站建设公司就选新鸿儒/提供北京网站建设报价/北京网站制作/北京网站设计/网站开发、北京网站建设公司电话【010-51267718】有优惠哦!
简体
繁体 简体
我们的服务遍布中国

我们的服务遍布中国
乃至世界

新鸿儒所服务的品牌地域与城市
北京 天津 上海 广州 深圳 香港 厦门 江苏 浙江 山东
重庆 长沙 武汉 成都 西安 宁夏 丽江 青海 云南 乌鲁木齐
黑龙江 内蒙古 河北 ...
新鸿儒服务与合作的全球各地
美国 加拿大 德国 法国 英国 瑞士 意大利 荷兰
印度 日本 韩国 ...

不论你的品牌在何处
我们都可以提供完善的服务与帮助

致电

010-51267718

《高性能网站建设进阶指南》阅读笔记 2

发布时间:2013-11-22 浏览:272打印字号:

大部分Comet服务器或明显地减少每个线程的资源开销,或者使用微线程或进程。如ErlyComet

大多数使用Comet的Php web应用采用分离式(off-board),Php编写的客户端与使用另一门语言编写的服务端通信。

工具包:Dojo Toolkit 或者 js.io

8.2 Transport Techniques

8.2.1 Polling

每x 毫秒发出一个请求,检查是否有更新

setTimeout(function() {xhrRequest( {"foo" : "bar"})}, 2000);


function xhrRequest(data) {

           var xhr = new XMLHttpRequest();

            xhr.open("get", "http://localhost/foo.php", true);

            xhr.onreadystatechange = function() {

                      if(xhr.readyState == 4) {

                                //

                      }

           };

           xhr.send(null);

}

8.2.2 Long  polling

Polling 可能会浪费http请求,并且消耗宝贵的CPU时间和带宽。即便数据更新间隔时间已知,polling可能会导致服务器端超负荷。服务器端还没有响应上一个数据请求,第2个或者第3个请求接踵而至,对服务器进行狂轰乱炸。


Long polling: 服务器端只有在有可用的新数据时才响应,保持一个所有未响应请求和它们对应连接的大集合。服务端通过: Transfer-Encoding:chunked 或 Connection:close响应来保持这些请求连接。



function longPoll(url, callback) {

         var xhr = new XMLHttpRequest();

         xhr.onreadystatechange == function() {

              if(xhr.readyState ==4) {

                      callback(xhr.responseText);

                      xhr.open('GET', url, true);

                      xhr.send(null);

              }

           }


          xhr.open('POST', url, true);

          xhr.send(null);

}


长连接的为您提:每台Apache服务器大约可以处理10 000个并发连接,而一个运行良好的Comet服务器应该有能力处理超过50 000个并发长连接,这在处理实时应用时是非常可取的。

8.2.3 Forever Frame

打开一个隐藏的Iframe,请求一个基于Http1.1 快编码的文档.

8.2.4 XHR Streaming

function xhrStreaming(url, callback) {

       xhr = new XMLHttpRequest();

       xhr.open('POST', url, true);

       var lastSize;

       if(xhr.readyState > 2 ) {

                    newTextReceived = xhr.responseText.substring(lastSize);

                    lastSize = xhr.responseText.length;

                    callback(newTextReceived);

       }

       if(xhr.readyState == 4) {

                    xhrStreaming(url, callback);

       }

8.2.5 websocket html5

8.3 Corss-Domain

Html5 postMessage

callback polling 

JSONP polling


function callbackPolling(url, callback) {

      var script = document.createElement("script");

      script.type = "text/javascript";

      script.src = url + "callback=callbackPolling.callback");

      callbackPolling.callback = function(data) {

           callbackPolling(url, callback);

           callback(data);

      };

      document.getElementsByTagName("head")[0].appendChild(script);

}


http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/ (八卦:麻球网,被盛大收购)

http://ajaxian.com/archives/jsonp-json-with-padding

http://ajaxpatterns.org/On-Demand_Javascript

8.4.1 Manging connections

FreeBSD/OS X 的 Kqueue

Linux 的 epoll

Windows 的 completions ports


主流语言中一些网络库封装成了一致且跨平台的API

C的libevent java.nio, twisted python


性能优化在不同情况下也大相径庭,比如聊天程序,有许多连接,但在任何一个特定时间内只有一小部分用户在接收信息。通过服务器端的连接共享管理大量闲置连接是有好处的。http://orbited.org 和 willowchat.org 做了深入的优化


实时股票报价监控应用程序,大量的连接不断地更细,很少有闲置连接的存在。Jetty/Lightstreamer/Liberator对这种情况作了优化。

8.4.3 portocols

Comet的连接只允许server -> client 通信或双向通信。

Bayeux Publish-Subscribe(pubsub)模型


随着websocket的兴起和处理百万级用户量的解决方案的出现,其复杂性会逐渐降低。





现在就与新鸿儒客服交流

010-51267718

您也可进行在线咨询或预约项目顾问
我要预约
在线咨询