摘要:服務端編寫部分代碼說明和的線程和里面都是一個線程分配一個。功能接收客戶端的數據功能返回數據給客戶端功能可以在這個方法里監控一個客戶端每秒發送了多少請求,避免惡意的客戶端攻擊。
Netty 服務端編寫 1、bootStrap 部分
final Bootstrap bootstrap = new ServerBootstrap(); ExecutorService boss = Executors.newCachedThreadPool(); ExecutorService worker = Executors.newCachedThreadPool(); bootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker)); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() throws Exception { final ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("decoder", new StringDecoder()); pipeline.addLast("encoder",new StringEncoder()); pipeline.addLast("messageHandler",new ServerHandler()); return pipeline; } }); ((ServerBootstrap) bootstrap).bind(new InetSocketAddress(10101));
代碼說明
1.1 boss VS worker
boss和worker的線程
boss和worker 里面都是一個線程分配一個Selector。
boss和worker的功能
boss的功能主要是處理連接,worker的功能是Channel的讀寫2、客戶端部分 2.1 handler繼承父類 2.2 Handler 常用方法說明 2.2.1 messageReceived
//1、接收數據 /* 沒有StringDecoder時,顯示字符串消息 final ChannelBuffer message = (ChannelBuffer) e.getMessage(); final byte[] array = message.array(); final String msg = new String(array); System.out.println("message is :" + msg); */ //有StringDecoder System.out.println(e.getMessage()); //2、返回數據 //返回數據給客戶端 /* 沒有StringEnCoder final ChannelBuffer channelBuffer = ChannelBuffers.copiedBuffer("hi, i"m server".getBytes()); ctx.getChannel().write(channelBuffer); */ //有StringEnCoder ctx.getChannel().write("hi, i"m server"); //3、拋出異常,看exceptionCaught 方法 //System.out.println(1/0); super.messageReceived(ctx, e)
代碼說明
關于StringEncoder,和StringDecoder
在Server中添加了上述的encoder和decoder,我們就可以直接接收和返回String類型的數據給客戶端。看類的繼承關系:
截圖說明
Netty 中和客戶端的數據傳輸有個上行和下行,UpStream,DownStream. 我們注意到Handler的父類中也同時繼承了這兩個類。
-功能1
接收客戶端的數據
-功能2
返回數據給客戶端
-功能3
可以在這個方法里監控一個客戶端每秒發送了多少請求,避免惡意的客戶端攻擊。可以獲取客戶端ip,調用Channel的close方法關閉連接。
備注:
接收和返回數據異常,會調用exceptionCaught
功能1
messageReceived方法處理數據拋出異常,這個方法會調用
功能1
一個用戶連接了,加載這個用戶的相關數據到緩存中2.2.4 channelDisconnected VS channelClosed
功能1
比如做游戲,一個玩家上線了,建立連接,我們就要把玩家的一些數據讀取到緩存(redis/memcached)中,當玩家下線了,這兩個方法調用,那么清空緩存中的數據。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71899.html
Netty 客戶端 1、Code 代碼:https://github.com/chengbingh... 服務類 線程池 socket 工廠 管道工廠 連接服務端 發送數據
摘要:服務端渲染兩種方式根據上文介紹對服務端渲染利弊有所了解,我們可以根據利弊權衡取舍,最近在做服務端渲染的項目,找到多種服務端渲染解決方案,大致分為兩類。第一種方式傳統方式服務端渲染,解決用戶體驗和更好的,有諸多工具使用這種方式如的的等。 最近在開發一個服務端渲染工具,通過一篇小文大致介紹下服務端渲染,和服務端渲染的方式方法。在此文后面有兩中服務端渲染方式的構思,根據你對服務端渲染的利弊權...
摘要:同構的關鍵要素完善的屬性及生命周期與客戶端的時機是同構的關鍵。的一致性在前后端渲染相同的,將輸出一致的結構。以上便是在同構服務端渲染的提供的基礎條件。可以將封裝至的中,在服務端上生成隨機數并傳入到這個中,從而保證隨機數在客戶端和服務端一致。 原文地址 React 的實踐從去年在 PC QQ家校群開始,由于 PC 上的網絡及環境都相當好,所以在使用時可謂一帆風順,偶爾遇到點小磕絆,也能夠...
摘要:今天分享一篇公司大佬的文章,非常厲害的大神崇拜臉,講講服務端渲染。服務端渲染,它到底用了什么原理呢服務端渲染原理服務端渲染的方式有很多,主流的服務端語言為使用渲染。 富婆來報道,今天想問題想不出來,隨手抓了一下頭發,沒想到啊沒想到,我那濃(mei)密(sheng)茂(ji)盛(gen)的秀發又少了好幾根,一定要改掉這個想不出來問題就揪頭發的壞習慣。今天分享一篇公司大佬的文章,非常厲害的...
摘要:由我所在的團隊共同翻譯完成,并發布在前端技術公眾號方凳雅集上,轉載于此。在移動端,客戶端渲染很難獲得并保持一個較快的渲染速度。使用技術進行服務端渲染的主要問題在于它會對可交互時間有明顯的負面影響,盡管它縮短了首次繪制時間 本文簡單介紹了web應用各種渲染方案,其中包括客戶端渲染、服務器端渲染等各種渲染方案。文章翻譯自:https://developers.google.com...。由...
閱讀 3625·2021-11-22 09:34
閱讀 3194·2021-11-15 11:38
閱讀 3066·2021-10-27 14:16
閱讀 1248·2021-10-18 13:35
閱讀 2436·2021-09-30 09:48
閱讀 3437·2021-09-29 09:34
閱讀 1654·2019-08-30 15:54
閱讀 1828·2019-08-26 11:57