摘要:服務(wù)端編寫部分代碼說明和的線程和里面都是一個線程分配一個。功能接收客戶端的數(shù)據(jù)功能返回數(shù)據(jù)給客戶端功能可以在這個方法里監(jiān)控一個客戶端每秒發(fā)送了多少請求,避免惡意的客戶端攻擊。
Netty 服務(wù)端編寫 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、接收數(shù)據(jù) /* 沒有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、返回數(shù)據(jù) //返回數(shù)據(jù)給客戶端 /* 沒有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)
代碼說明
關(guān)于StringEncoder,和StringDecoder
在Server中添加了上述的encoder和decoder,我們就可以直接接收和返回String類型的數(shù)據(jù)給客戶端。看類的繼承關(guān)系:
截圖說明
Netty 中和客戶端的數(shù)據(jù)傳輸有個上行和下行,UpStream,DownStream. 我們注意到Handler的父類中也同時繼承了這兩個類。
-功能1
接收客戶端的數(shù)據(jù)
-功能2
返回數(shù)據(jù)給客戶端
-功能3
可以在這個方法里監(jiān)控一個客戶端每秒發(fā)送了多少請求,避免惡意的客戶端攻擊。可以獲取客戶端ip,調(diào)用Channel的close方法關(guān)閉連接。
備注:
接收和返回數(shù)據(jù)異常,會調(diào)用exceptionCaught
功能1
messageReceived方法處理數(shù)據(jù)拋出異常,這個方法會調(diào)用
功能1
一個用戶連接了,加載這個用戶的相關(guān)數(shù)據(jù)到緩存中2.2.4 channelDisconnected VS channelClosed
功能1
比如做游戲,一個玩家上線了,建立連接,我們就要把玩家的一些數(shù)據(jù)讀取到緩存(redis/memcached)中,當(dāng)玩家下線了,這兩個方法調(diào)用,那么清空緩存中的數(shù)據(jù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71899.html
Netty 客戶端 1、Code 代碼:https://github.com/chengbingh... 服務(wù)類 線程池 socket 工廠 管道工廠 連接服務(wù)端 發(fā)送數(shù)據(jù)
摘要:服務(wù)端渲染兩種方式根據(jù)上文介紹對服務(wù)端渲染利弊有所了解,我們可以根據(jù)利弊權(quán)衡取舍,最近在做服務(wù)端渲染的項(xiàng)目,找到多種服務(wù)端渲染解決方案,大致分為兩類。第一種方式傳統(tǒng)方式服務(wù)端渲染,解決用戶體驗(yàn)和更好的,有諸多工具使用這種方式如的的等。 最近在開發(fā)一個服務(wù)端渲染工具,通過一篇小文大致介紹下服務(wù)端渲染,和服務(wù)端渲染的方式方法。在此文后面有兩中服務(wù)端渲染方式的構(gòu)思,根據(jù)你對服務(wù)端渲染的利弊權(quán)...
摘要:同構(gòu)的關(guān)鍵要素完善的屬性及生命周期與客戶端的時機(jī)是同構(gòu)的關(guān)鍵。的一致性在前后端渲染相同的,將輸出一致的結(jié)構(gòu)。以上便是在同構(gòu)服務(wù)端渲染的提供的基礎(chǔ)條件。可以將封裝至的中,在服務(wù)端上生成隨機(jī)數(shù)并傳入到這個中,從而保證隨機(jī)數(shù)在客戶端和服務(wù)端一致。 原文地址 React 的實(shí)踐從去年在 PC QQ家校群開始,由于 PC 上的網(wǎng)絡(luò)及環(huán)境都相當(dāng)好,所以在使用時可謂一帆風(fēng)順,偶爾遇到點(diǎn)小磕絆,也能夠...
摘要:今天分享一篇公司大佬的文章,非常厲害的大神崇拜臉,講講服務(wù)端渲染。服務(wù)端渲染,它到底用了什么原理呢服務(wù)端渲染原理服務(wù)端渲染的方式有很多,主流的服務(wù)端語言為使用渲染。 富婆來報道,今天想問題想不出來,隨手抓了一下頭發(fā),沒想到啊沒想到,我那濃(mei)密(sheng)茂(ji)盛(gen)的秀發(fā)又少了好幾根,一定要改掉這個想不出來問題就揪頭發(fā)的壞習(xí)慣。今天分享一篇公司大佬的文章,非常厲害的...
摘要:由我所在的團(tuán)隊(duì)共同翻譯完成,并發(fā)布在前端技術(shù)公眾號方凳雅集上,轉(zhuǎn)載于此。在移動端,客戶端渲染很難獲得并保持一個較快的渲染速度。使用技術(shù)進(jìn)行服務(wù)端渲染的主要問題在于它會對可交互時間有明顯的負(fù)面影響,盡管它縮短了首次繪制時間 本文簡單介紹了web應(yīng)用各種渲染方案,其中包括客戶端渲染、服務(wù)器端渲染等各種渲染方案。文章翻譯自:https://developers.google.com...。由...
閱讀 3616·2021-11-22 09:34
閱讀 3186·2021-11-15 11:38
閱讀 3039·2021-10-27 14:16
閱讀 1233·2021-10-18 13:35
閱讀 2424·2021-09-30 09:48
閱讀 3429·2021-09-29 09:34
閱讀 1626·2019-08-30 15:54
閱讀 1818·2019-08-26 11:57