傳統(tǒng)的WEB框架是基于Servlet標準設計實現(xiàn)的壳鹤,加上Tomcat的出現(xiàn),直接促成了JSP的崛起饰迹,然而時過境遷芳誓,Servlet已風光不在,Web容器存在的必要性也被越來越多的人質(zhì)疑啊鸭。原因就在于人為的將應用與容器剝離锹淌, 雖然這種做法本意是好的,但是結果就是給開發(fā)測試部署帶來一系列集成的問題赠制,SPRING BOOT的快速流行就是一個現(xiàn)實的例子赂摆,越來越多的項目開始使用內(nèi)嵌的Jetty或Tomcat就是一個現(xiàn)實的例子。
Servlet還帶來一個問題钟些,就是有狀態(tài)的服務器烟号。一旦使用了Session,服務器就無法享受到水平擴展的好處了政恍,由此不得不采用Session復制或者粘性Session(Sticky Session)的 方案來解決這個問題褥符,無論采取哪種方案都會有性能損耗,并且推高了技術成本抚垃。
Play拋棄了Servlet/JSP里Session等概念, 內(nèi)置沒有提供方法將對象與服務器實例進行綁定(你要使用HashMap存的話Play也沒辦法)喷楣。 推薦的做法是使用外部緩存, 比如Redis, Memcached等『资鳎可能有人會覺得沒有Session是Play的一個缺點(Play里的Session和Servlet Session不是一回事), 但是只要你開發(fā)過流量大一點的應用, 你就會理解這點铣焊。
Play是基于Netty實現(xiàn)的異步的請求響應接口(Request/Result),消息驅(qū)動的框架罕伯。請求只有在有事情做的時候才會占用線程資源曲伊,不會出現(xiàn)一個線程長時間等待某操作完成或超時的時況。