万象直播app破解版_欧美国产日韩无遮挡在线一区二区,亚洲国产综合精品中久,强奷白丝女仆在线观看,超碰三级大陆在线

您的位置:首頁 > 前沿資訊

百萬亞瑟王界限突破(中亞文學 被忽略的文學腹地)

導讀百萬亞瑟王界限突破文章列表:1、中亞文學 被忽略的文學腹地2、120部番劇!2019年日本動畫個人總結3、原版巴巴多斯只在加勒比海最東4、Netty如何做到單機百萬并發(fā)?5、巴西也動

百萬亞瑟王界限突破文章列表:

百萬亞瑟王界限突破(中亞文學 被忽略的文學腹地)

中亞文學 被忽略的文學腹地

位于亞歐大陸腹地的中亞地區(qū),遠離海岸線,卻是絲綢之路的必經之所,幾千年來,亞歐各大文明在這里交融消長。我們現(xiàn)在常說的“中亞”,通常指哈薩克斯坦、烏茲別克斯坦、吉爾吉斯斯坦、塔吉克斯坦和土庫曼斯坦五國,其中有三國與中國接壤,而生活在這片廣袤土地上的人們,更與我國西北地區(qū)的哈薩克族、烏孜別克族、柯爾克孜族、塔吉克族、撒拉族等族人民血脈相通。

中亞有悠久的歷史和文明,但當提起文學,尤其是現(xiàn)當代文學,我們卻很少想起這片地域。為什么?想究其原因,首先需要了解這里有些復雜的語言生態(tài)。

中亞五國各有各的主體民族語言,其中,哈薩克語、烏茲別克語、吉爾吉斯語(又譯為柯爾克孜語)和土庫曼語屬于突厥語族,而塔吉克語獨屬于印歐語系語言。

從公元16世紀開始,俄羅斯在中亞的勢力日益擴張,大量俄羅斯移民涌入中亞,直至19世紀沙皇俄國完全占領中亞。于是,俄語在中亞日益推廣和普及。蘇聯(lián)時期,俄語的優(yōu)勢地位在中亞得到進一步鞏固,其影響力也延續(xù)至今。蘇聯(lián)解體后獨立的中亞五國,基本都同時通用俄語和本民族語言,而在商務、科技、文化藝術領域,俄語的作用依然難以替代。

除此之外,中亞幾種語言的書寫形式在歷史中也經歷了數(shù)次變革。阿拉伯字母、拉丁字母,斯拉夫語系的西里爾字母……都曾成為其語言書寫下來的方式。近年來,為了更好地融入國際間的交流,拉丁字母又重新被推行。

于是,我們可以想象,當語言和文字不得不幾經嬗替,文學——我們通常所指的書面語形式的現(xiàn)當代文學,很難發(fā)展得特別豐富。再加上語言相隔造就的閱讀障礙以及翻譯的有限,我們對中亞文學的了解就更為有限。

中亞有相當精彩的口頭文學傳統(tǒng),這里的史詩和民間故事,在世界范圍內也無法忽視。比如烏孜別克族的史詩《阿勒帕米西》、吉爾吉斯的史詩《瑪納斯》……都是由“阿肯”(歌者)們口口相傳至今的偉大作品。

從已經譯為中文的中亞文學作品中,我們也能依稀理出一點脈絡。哈薩克斯坦現(xiàn)代文學的奠基者、著名詩人阿拜·庫南拜耶夫的作品,從上世紀50年代開始就有陸續(xù)譯介,《阿拜箴言錄》還有不止一個譯本。作為蘇聯(lián)文學的一部分,薩比特·穆卡諾夫、哈比登·穆斯塔芬等哈薩克作家的作品也曾被引進到中國。穆合塔爾·阿烏埃佐夫根據(jù)阿拜生平事跡創(chuàng)作的長篇歷史小說《阿拜之路》,也在上世紀90年代引進并重版。公元十五世紀烏茲別克的偉大詩人阿里舍爾·納沃伊的長詩和傳記小說,都有了中文譯本。阿布都拉·哈迪爾的小說《圣殿里的毒蝎》中文版出版,又擴大了中國讀者對烏茲別克文學的認知。

真正被廣泛譯介并傳播,對中國文學界產生了巨大影響力的中亞作家,當然要數(shù)來自吉爾吉斯斯坦的艾特瑪托夫。盡管主要活躍于蘇聯(lián)時期的他,通常被歸于“蘇俄文學”的框架之下。他的《白輪船》《永別了,古利薩雷》《查密莉雅》《一日長于百年》……得到了萬千中國讀者的共鳴。艾特瑪托夫的小說中有詩性和人道主義的底色,在他抒情氣質濃郁的文字里,我們能讀到來自吉爾吉斯草原的民族傳統(tǒng)與靈魂,也能讀到蘇俄體制的時代記憶。在中亞文學的版圖中,艾特瑪托夫像一個出挑的異數(shù),但又恰恰說明著,我們不能用狹隘的“民族文學”的視角去揣測文學,它其來有自,卻能超越種種邊界。

除此以外,與中國有著深刻淵源的“東干文學”也在近年來受到了不少學者的關注。東干族是指遷移到中亞的中國甘肅及陜西回族后裔,如今是散布于中亞各國的少數(shù)民族,他們中的許多人能操陜西關中方言和以陜甘方言為基礎的新疆伊犁漢、回方言,也有作家用自己的語言進行文學創(chuàng)作。

中亞簡單卻又錯綜的文學地圖和這片土地的歷史一樣,本身就是各民族不斷流動、遷徙、共處、相融的證明。

《阿拜箴言錄》

作者:(哈)阿拜·庫南拜耶夫 譯者:粟周熊、艾克拜爾·米吉提

版本:民族出版社 1995年

出生于1845年的阿拜·庫南拜耶夫是哈薩克斯坦最偉大的詩人,也是承前啟后的思想家,是近代哈薩克斯坦書面文學的奠基人,在哈薩克斯坦具有非凡的地位。阿拜創(chuàng)作了大量的詩歌、長詩、散文和哲學作品,他說:“詩是文學的精華,語言的皇帝”;“我的方向——讓詩的語言更加精煉/我要用詩的清泉灌溉人們的心田/決不為個人消遣去揮舞筆墨/只為了勉勵那些上進的青年”。阿拜的寫作有著鮮明的啟蒙立場,他對哈薩克民族作了深刻的文化反思,批評人們生活中的惡習,張揚自己的追求與理想。《阿拜箴言錄》中多是短小的具有哲理性質的語錄。

《阿拜之路》

作者:(哈)穆合塔爾·阿烏埃佐夫 譯者:哈拜、高順芳

版本:民族出版社 2004年4月

《阿拜之路》是哈薩克斯坦作家、學者、阿拜學奠基人穆合塔爾·阿烏埃佐夫根據(jù)阿拜的生平事跡創(chuàng)作的歷史小說,長達一百四十萬字。這本書既是阿拜本人的傳記小說,也是一部哈薩克民族的詩史,兼具文學和史料價值。穆合塔爾筆下的阿拜表現(xiàn)出了膽識、勇氣和大無畏的精神,以及高尚的思想境界;書中對哈薩克族的生活、娛樂也有著最真實的描寫。《阿拜之路》多卷出版以后,在1959年獲蘇聯(lián)列寧文學獎,之后被譯成一百多種文字在世界各地出版,是哈薩克斯坦當代最重要的文學作品之一。

《法爾哈德和希琳》

作者:(烏)阿里舍爾·納沃伊 譯者:吳國璋

版本:長江文藝出版社 2008年3月

阿里舍爾·納沃伊是公元十五世紀烏茲別克斯坦的偉大詩人、哲學家、藝術家、政治活動家。他被譽為烏茲別克斯坦文學鼻祖,烏茲別克斯坦文學語言奠基人。他的作品中最負盛名的是《五詩集》,包括《正直者的不安》《萊伊麗和馬季農》《法爾哈德和希琳》《七行星》和《伊斯坎德爾墻》五部長詩。在詩歌之外還著有哲學論文《心之所鐘》等,譴責荒淫無道的執(zhí)政者,主張由正直的執(zhí)政者治理國家。這本《法爾哈德和希琳》,是納沃伊《五詩集》中迄今唯一一部被完整譯為中文的作品。

《一日長于百年》

作者:(吉)欽吉斯·艾特瑪托夫 譯者:張會森、宗玉才、王育倫

版本:華東師范大學出版社 2018年1月

去年,艾特瑪托夫的這部長篇小說時隔三十年在中國重版。相對于他的早期作品如《白輪船》等中篇小說,《一日長于百年》的敘事更為復雜,小說的情節(jié)同時在現(xiàn)實、傳說和科幻三個層面展開。薩雷·奧捷卡大草原上一個荒僻的鐵路會讓站,和大氣層之外蘇美兩國的“均等號”空間站,分別發(fā)生了一件事情,打破了原有狀態(tài)。艾特瑪托夫在會讓站中塑造了一幅“無知”的群像,他通過對“宇宙”意識的引入,讓所有人都處于無知的穹蓋下。而在美蘇聯(lián)合委員會,那里又呈現(xiàn)出“無知”的另一種形態(tài)……在繁復的多層次結構中,艾特瑪托夫拓寬了對生活觀照的幅度,表達了自己對人類命運的關注和思考。

《亞瑟兒·十娃子精選詩集》

作者:亞瑟兒·十娃子 選編:M.X.依瑪佐夫 譯者:林濤、崔鳳英

版本:世界圖書出版公司 2015年6月

亞瑟兒·十娃子是東干族文學的奠基人,東干文字創(chuàng)制的參與者之一。他出版過20多部詩集、散文集、長篇小說和劇本等,有《革命潮》《富足的光陰》《祖國的路》《勞動的火花》《逝去的歲月》《春風》等。在創(chuàng)作之外,他還用東干文、吉爾吉斯文翻譯了普希金、萊蒙托夫等俄羅斯作家的作品,還用俄文翻譯了《三國演義》《西游記》等中國古典文學作品的片斷。近年翻譯出版的這本《亞瑟兒·十娃子精選詩集》,從詩歌的層面看也許稱不上精彩,但作為一個獨特的文本,亦不失關注的價值。對照書中的一些近現(xiàn)代東干語詞,也能讓我們對現(xiàn)代漢語的生長變化多一些新鮮的體認。

撰文整理/新京報記者 李妍

120部番劇!2019年日本動畫個人總結

——不評分,不評價好壞,純粹隨想隨記,個人看動畫只關注有多少適合自己的看點,比如劇本,比如聲優(yōu),比如作畫,比如角色等等,可能有那么一兩個關注點其他都很爛也會默默看完。
順序以BANGUMI以及翻一年自己的微博歷史為準
2019年冬
1.revisions
網飛一舉放送,19年開年第一部完結的動畫,中二廢材男主在前期到中盤搞笑的丑態(tài)百出挺勸退人的,但是堅持看到結尾,后期的回收伏筆的劇情還算不錯的解釋了男主前期的狀態(tài);雖然鏡頭大部分圍繞著主角群,還是用一些配角的戲份把這個孤立社會下的人生百態(tài)表現(xiàn)出來了,除了一些細節(jié)部分可能不那么好,整體的劇情很緊湊,亮點就是結尾的回收,還有對時間穿越BUG的解釋;最后3D渲染畫面的水準還是不錯的,不過比不上年底的
BEASTARS就是了。
2.Endro~!
標準萌豚片,套了個勇者魔王的背景設定,演了一個只有愛的反常規(guī)的冒險故事,作畫整體挺穩(wěn),沒有太掉線的段落,關鍵是這個CV陣容,讓我無法拒絕,傻笑的看著她們的日常既輕松又快樂。
3.輝夜大小姐想讓我告白~天才們的戀愛頭腦戰(zhàn)~
這季看得最開心的動畫之一,笑點滿載,不落俗套的段子,幾位主要角色都有各自獨有的魅力與個性,動畫制作上肉眼可見的用心,聲優(yōu)們的演技也是滿點,算是今年整體上最高質量的戀愛喜劇動畫之一。(略顯遺憾的就是玉米粒的戲份少了一點點;看到柚碰的好姬友古賀表現(xiàn)出色,就會想起有利息的引退...
4.多羅羅
手冢治蟲的名作改編,原作我沒看過,單說動畫前期作畫演出上線,世界觀的展現(xiàn),還有主角的主要矛盾點,對于喜歡嚴肅正劇的人來說應該很有吸引力,就是中盤明顯工期把控不好作畫掉線明顯,搭配中期的比較沒那么有意思的劇情,就顯得很拉胯,還好后期隨著劇情高潮制作有慢慢上線;這故事想要探討的深刻主題,動畫只做到了淺嘗輒止,雖然如此,但是作為一部嚴肅正劇題材的動畫還是相當值得一看的部分。
5.粉彩回憶
核心設定有點類似小時候看的十二生肖守護神,只不過穿越的作品是ACG作品,前期NETA主要是今年來的熱門作品,比如點兔、俺妹之類的,后期就有一些老派的作品,比如EVA;本質做成了NETA類動畫,然而這類動畫一開始有新鮮感還覺得有趣,沒了新鮮感以后又做不出創(chuàng)意就會越發(fā)無聊;制作上這片也沒有什么值得稱道的地方,然后這片色指定讓我覺得這片至少回到了十年前,對了這片的ED印象中很H,讓我當時覺得頗為意外。
6.笑容的代價
看第一話覺得是王道蘿卜片,看到OP出來以為是百合片,然后看下去變成腦殘戰(zhàn)爭片,最后看完原來傻逼環(huán)保片,這個劇情是真的蠢,這個公主我是真的特么沒法接受,你跟我說她還是小屁孩,可以,但是都便當一籮筐了也沒見你真的成長了,沖著玉米粒和早見看完的,我特么還得忍著玉米粒這個公主。
7.飛翔吧!戰(zhàn)機少女
這片最后幾話的空戰(zhàn)演出真的不錯,本身設定就魔幻,所以那不科學的機動就看著很爽快,動畫本身素質有一般往上的輕改動畫水準,劇情反正就是一般后宮輕改該有的水平,動畫人設感覺女主還蠻還原遠坂畫風的可愛感,這片可能最差的地方就是主角機的純色涂裝真是土鱉到不行233
8.格林筆記
比粉彩回憶還要更像十二生肖守護神一點,算是一般水準的游戲改編動畫,沒啥亮點,對童話傳說故事的改編中規(guī)中矩,男主那變身算是這片主要槽點。
9.煙草
粗糙的3D制作卻展現(xiàn)出了一個非常有趣的末世世界觀,劇情前期沉悶,中盤推進和伏筆揭示很有趣也很有想法,就是收尾感覺還是有點一般;可能礙于經費,這片的音響不太行,所以這片視聽的聽上真是靠香帥撐起來的。
10.環(huán)戰(zhàn)公主 CIRCLET PRINCESS
因為貝吉塔不知不覺看完這游戲廣告片,感覺就是在有限的資源內做出的合格廣告片,雖然格斗題材,但是打戲沒有看點,倒是日常妹子畫得挺穩(wěn),故事老套,看點主要還是貝吉塔。
11. 約會大作戰(zhàn) 第三季
一路看下來,這片前兩季動畫也就那樣,這第三季從放出宣傳到正式播放才隔了幾個月,到最后能好好做完沒有延期我都覺得制作組夠屌了;故事反正標準輕改水平,這季涉及到了時間穿越,算是有那么點意思。
12.家有女友
沒看漫畫,動畫就這一季看下來,這劇情狗血到不行,在我的價值觀里就覺得男主是純正渣男,因為有本壘片段,所以能聽到真扎和陽子太太不可名狀的聲音;然后這片作畫還不錯,繪柄很穩(wěn),女角色都很可愛。
13.不吉波普不笑
非常需要對電波的作品,而且動畫敘事手法過于碎片化,然后又是群像劇,再加上本身設定又非常的晦澀難懂,這片看著是真的費腦,但是對上了,沉浸進去就會喜歡上這個光怪陸離的世界;然后又到了吹凹醬牛逼的環(huán)節(jié)。
14.瑪娜利亞魔法學院
幾乎全程發(fā)糖的百合動畫,作畫精致,演出也很有氣質,百合控不容錯過的一份“英式下午茶”。
15.靈能百分百 第二季
個人看法第二季相比第一季又更精彩了,故事上不論是跟靈幻的矛盾還是后面超能力建國,都讓這個荒誕故事更有深度了;然后全片作畫爆炸,全片打戲真是一浪接著一浪,看著人爽飛了,應該是全年打戲作畫質量密度最佳的TV動畫了。
16.笨拙之極的上野
搞笑小品動畫,沒節(jié)操女主的那些天才發(fā)明是真的腦洞大,篇幅也不長,所以大部分點子都很好笑,沒有太冷場的地方。
17.五等分的新娘
漫畫一直有在追,所以在看到這動畫人設的色指定出來后期待值就大降了,這個高明度低飽和的色指定看著是真不好看,動畫實際制作是一般,作畫崩壞不少,動畫本身品質就是靠著原作加入推理元素的多角戀愛情故事以及一票人氣CV撐著,動畫整體只能說中規(guī)中矩吧。(說實話動畫還不如線下EVENT有意思)
18.同居人時而在腿上、時而跑到腦袋上
非常適合鏟屎官觀看的作品,動畫基本構成就是每話分別以人和貓兩個視角去演繹同樣的日常,從中展現(xiàn)人與貓之間逐漸成為彼此重要存在的經歷,然后哈魯是真的很可愛,對貓有好感或者愛貓人士這片應該能收獲不少快樂。
19.盾之勇者成名錄
異世界穿越輕改,前期主角受虐的部分算是有那么點反傳統(tǒng),男主跟setosan和chanrina互動有點類似養(yǎng)女兒的感覺還挺有趣的,但是關鍵其他配角的降智太過了,后期不少劇情看著太強行就覺得很蠢,整體上算是一般水平的輕改作品,最后看完這片的最大理由還是chanrina這只鳥真的很可愛。
20.天使降臨到了我身邊
現(xiàn)在回頭看這片應該是全年最佳萌豚片,制作水平上乘,作畫幾乎就沒掉過線,高質量搞笑的日常,充分展現(xiàn)性格迥異角色的各自的可愛,最終話的舞臺劇演出簡直點睛之筆,可能略顯不足的地方就是作為標題天使的主角花的存在感不如日向,喵內實在太洗腦了WWWWWW
21.約定的夢幻島
奇幻版越獄?詭計的設計,智斗的劇情,都蠻精彩的,動畫的演出和氣氛烘托也很贊,有幾段劇情有那么點恐怖片的感覺,作畫沒有掉線,動畫可以說蠻出色的展現(xiàn)了原作的魅力;最后真扎的少年役很不錯啊。
22.荒野的壽飛行隊
軍宅狂歡的作品,雖然我不是軍宅就是了,但是因為玩砍口壘,所以對這片還是很有好感的,這片劇情上是比較水,主要看點就是一場接一場的空戰(zhàn),飛機模型遠比同期的戰(zhàn)機少女可要精致太多了,空戰(zhàn)也是更上一層次,然后因為砍口壘的關系,最后看到震電出場的時候我HI爆了。
23.狂賭之淵 ××
不知是我百合入腦,還是啥原因,感覺二季相比一季百合成分更多了,可能是習慣這片的套路,所以這季季常賭局感覺都一般般,倒是出色作畫下的賣肉和顏藝依舊是招牌看點。
24.魔法少女特殊戰(zhàn)明日香
又是魔法少女的套皮作品,這片與其說是魔法少女不如說戰(zhàn)后老兵,戰(zhàn)后老兵的那種狀態(tài)倒是有做出來一點,戰(zhàn)斗模式也是感覺套了魔法少女皮的特種兵的感覺,所以故事看下來還是有點意思的,雖然有不少血腥部分就是了;還有啊呀呸出演明日香也是很有嘈點WWWW
2019年春
25.Fairy gone
在看第二季改觀之前,在第二季理清劇情,完整展現(xiàn)出這個世界觀之前,這個第一季是真的很迷,突出一個敘事混亂,我感覺我看懂了每一個角色在做啥,為啥做啥,但是就是沒能看懂在演什么故事;類似替身和Persona的妖精設定,還有一戰(zhàn)前后歐洲背景設定,影像色調烘托出一股文青氣息,但是故事講的實在迷。
26.MIX:明青故事
對大部分運動我都蠻喜歡的,但是偏偏棒球一直不是我的菜,所以小時候看的touch并不像大部分人那樣打動我,在這時代看到這作品更顯珍貴,這種娓娓道來的舒緩感,宛如現(xiàn)實存在的真實感,是現(xiàn)在大部分作品最缺少的特性,不時的meta演出又在告訴我們這不是現(xiàn)實,真是一部輕松幽默又溫柔清新的作品。
27.RobiHachi
搞笑版低配宇宙丹迪,宇宙公路片,賣BL戲份不少,各個星球不同設定有些過于電波,也涵蓋了不少現(xiàn)實社會映射,組長這個各種意義上的牙白,然后也太慘了,只能說你的愛太沉重,這片意外的是這季看得最開心的動畫之一 。
28.機動奧特曼
結尾簡直標準美式英雄片結尾,最后一話打得真是爽,一開始幾話感覺打戲幀數(shù)不是很足看起來微妙的卡頓感,后面不知道是習慣了還是幀數(shù)加了看著好多了,這片3D效果雖然趕不上美帝水平,不過在這幾年日本一票3D動畫里還是算不錯水準的,而且配樂真心好;不少橋段感覺借鑒了美帝作品,比如黑衣人、蜘蛛俠、超人等等,因為沒看過原作漫畫,所以這動畫我覺得還是蠻不錯的。
29.在世界盡頭詠唱戀曲的少女YU-NO
GALGAME名作改編,在這個GALGAME式微的時代,這片純粹就是情懷之作了,在時代能做滿半年,沒分割放送,而且畫面沒有太崩的地方,簡直有能好么;時空穿越,不同女角線路雜糅到一起,還能講清整個故事,該有的線索和伏筆都有,除了異世界篇和結局有些比較微妙的地方,畢竟是90年代的作品,有其時代的局限性,但是個人認為這動畫已經做得不錯了,特別是在這個不缺錢的熱門人氣作品都會分割放送的時代,一個GAL改動畫能做成這樣讓我相當意外了。
30.一弦定音!
古箏世家的人創(chuàng)作出來的以古箏為主題的少女漫改編動畫,然后一期當時的感覺就是制作一般的低配花牌情緣,一期劇情還是前期鋪墊社團團員組成,故事傳統(tǒng)老套,但是至少在水平線上,所以并不難看,而且一期的古箏曲就已經慢慢體現(xiàn)出本作最大魅力,但是爆發(fā)要等到二期。
31.皿三昧
幾原監(jiān)督的搞基片,相比上一作百合熊嵐,這片劇情要好理解多了,各種惡趣味的意象演出只能說不虧是你,深入淺出的探討人的欲望與隱私,高質量的作畫展現(xiàn)了一個光怪陸離的世界,讓我一個百合控堅持看完了這GAY片,然后村瀨步的女聲是真牛逼。
32.為什么老師會在這里!?
純賣肉片,ATX請,福利段子還挺搞笑的,小靜和小林竟然不是一對有點失望。
33.一個人的oo小日子
角色名諧音梗簡單粗暴,女主一開始很有趣,但是看到后面就覺得有點煩躁,實在是急死人,有點輕百合要素,但是不深,minami的壓低聲線的外冷內暖辣妹挺新鮮,不過印象更深的還是阿卡林的頭槌攻擊2333
34.淫亂的青醬不能學習
有一點賣肉的搞笑戀愛劇,有趣的段子主要來自悶騷又純情的癡女女主帶來反差,后期基本就是變相撒狗糧放閃,津田叔的變態(tài)老爹實在過于生草。
35.CAROLE & TUESDAY
非常純粹的音樂番,在上半季的選秀節(jié)目之前,劇情還是有那么點意思的,小格局小敘事,劇情矛盾更集中,情緒代入感更強一點,下半季格局拉大,激化了地球火星的社會矛盾,更多角色的登場,故事越發(fā)白開水,劇情沒有撐起來變得越發(fā)無趣,不過還好歌曲一直在線,好幾首歌是真的好聽,而且動畫的演出作畫也很棒,所以聽歌是看這片最大享受。
36.強襲魔女 501部隊起飛!
小KK魔女們的搞笑日常,純粉絲向的作品。
37.信長老師的年幼妻子
比同期的為什么老師在這里還要更直接更露骨的賣肉,ATX請,劇情沒什么意思非常無趣無腦的后宮劇情,就是純粹為賣肉服務;在這片聽到ari讓我蠻意外,所以遵循欲望看完了233
38.水果籃子 第一季
非常用心的重制版,舊版對來我說是一份相當美好的初中回憶,就算是在童年美化下的對比,我也覺得新版做得很不錯,ho醬的小透很棒,石見的小透也很亞撒西,良好的制作,通過影像、配樂、故事再現(xiàn)了那份治愈人心的溫柔,真是又收割了我不少眼淚;如果說有什么不足的話,就是舊版岡崎律子演唱OP實在太過經典了,這是著實比不過,雖然新版的OPED也挺好聽的,特別是ED2搭配動畫演出感覺很好。
39.一拳超人 第二季
如果說第一季是一群大佬在村田版的打戲基礎上做了加法,那這一季就是在村田版的基礎盡量不做減法的同時把資源有限分配做到盡可能的還原原作,那我覺得這一季雖然不如一季優(yōu)秀,但是至少做到了及格。
40.賢惠幼妻仙狐小姐
教練,我也好想要有這樣發(fā)出ajuju甜美聲線、家事萬能、料理上手、又能給你膝枕、還有毛茸茸尾巴與獸耳的幼妻嗷,作為社畜被精準擊沉,現(xiàn)實中不存在的夢只能通過作品去感受了。
41.八月的灰姑娘棒球隊
低成本低質量的手游改,有一些百合糖可以吃,作畫不怎么樣,故事也很低齡,算是平均水平以下的動畫吧,我也不知道怎么就看完了這爛片,大概是因為玉米粒的吉祥物讓我堅持下來了。
42.叛逆性百萬亞瑟王 第二季
延續(xù)一起的傻屌風格,團長你在變態(tài)阿庫婭之路越走越深,每一對合體新形態(tài)人設很帥,然并卵本質依舊傻屌。
43.女子高中生
差不多就是個默片,如片名就是JK日常劇,非常生活化的日常,就是全程基本沒說過話。
44.川柳少女
狗糧片,香菜這個女主很可愛也很大,就是這個設定回頭想還是挺奇葩的,全程用五七五川流句式交流,你能長這么大,是真不容易嗷。
45.文豪野犬 第三季
第三季還挺好看的,這片倒是一直往上走,第一季是除了一開始的文豪NETA異能有點新鮮感,故事真的無聊得一批,第二季慢慢開始有意思了,然后劇場版把異能戰(zhàn)斗表現(xiàn)得更加炫酷了,這一季則在故事上又有更多亮點更加張弛有度。
46.異世界四重奏
把幾部人氣輕改作品的角色湊一起演了個蠻有趣搞笑的粉絲向短劇,這樣的聯(lián)動企劃可以更輕松的心態(tài)去觀看,感謝角色可愛魅力的同時還能收獲歡樂何樂而不為呢。
47.賢者之孫
低成本制作的異世界穿越龍傲天廁紙輕改,純粹的無腦爽片,男主從頭到尾強無敵,跟女主雙箭頭,也就看看撒狗糧了,動畫制作又爛,作畫崩壞,演出尷尬,用來填補空閑時間當做搞笑片看的消遣之作。
48.進擊的巨人 第三季 Part.2
漫畫一直在看,所以劇情沒啥好說的,動畫完全還原了原作劇情,瑪利亞之墻奪還戰(zhàn)做得實在太屌,不論作畫、演出、配樂都過于牛逼,比當時看漫畫還要震撼,特別是阿爾敏那段灼燒的演出,現(xiàn)在想起來還能鳥肌了,這就是動畫體驗和漫畫體驗區(qū)別。
49.鬼滅之刃
非常標準的少年漫,前期主要吸引我的還是水之呼吸類似浮世繪水紋特效演出,阿卡林演的這個妹妹很可愛,雖然除了最開始的戲份,后面基本莫得話說了,在進蜘蛛山篇之前劇情是一路走低的,到鼓鬼篇最無聊沉悶的時候,花江與阿卡林的親情羈絆與內山渴望家人的碰撞為基調,加上人人在吹的19話演出,讓蜘蛛山篇整體有一個很高水準,拉高了整季動畫的觀感,回頭整體看就是一個高開低走再高開低走的過程,整體的看敘事節(jié)奏并不那么好。
50.褲襪視界
高質量足控福利短篇,我覺得這動畫感覺比原作插畫還讓我?guī)Ц小?br/>51.我們真的學不來
平均水準的多角戀校園戀愛劇,套路得不能再套路的劇情,整體制作算是比較穩(wěn)定,沒有太拉跨也沒有太出彩的地方,與動畫相比,NICO生放節(jié)目里看幾位女聲優(yōu)可能讓我感覺更有趣,osayu真的是笨蛋啊。
52.消滅都市
非原作黨看得有點悶,最后這結局應該組長和香菜分開到不同世界線了吧;這片作為游戲宣傳片整體質量真不怎么樣,真是沖著組長和香菜看完的。
2019年夏
53.7SEEDS
夏季生存要素的動畫之一,這作算是更正統(tǒng)派的末世生存,描述的重點是人與人之間在末世下展現(xiàn)的關系,各種各樣性格人展現(xiàn)各種各樣的人性,只不過感覺并沒有寫好,本身篇幅不夠,也是這么多角色的群像劇,然后不少劇情時間線又不統(tǒng)一,沒寫好就會變的很混亂,不然作為末世基礎的背景設定其實是有點意思的,算是比較令人失望一作。
54.Dr.STONE
夏季生存要素的動畫之一,然而這個末世生存的背景只是個皮,后期一轉就是在末世展現(xiàn)科學精神,雖然這攀科技的過程有點夸張,而且劇情細節(jié)上還是有不少瑕疵的,但是老爹跨越時間界限的互動真的有感動到我,吐個槽,沒看過原作最開始看的時候我真特么以為古川和市之瀨是主角,結果進入中盤就完全神隱了草。
55.你遭難了嗎?
夏季生存要素的動畫之一,硬核荒島生存,漫畫也看了幾年了,動畫整體上還是挺滿意,雖然刪了狗糧組和老爹的戲份,不過作為很大可能只有這一季的動畫,刪了這部分也是無可奈何的,還有我很喜歡動畫CAST的選擇,幾位CAST選擇都很合適,能夠在熒幕上看到譽爺寵溺紫音足夠讓我開心。
56.彼方的阿斯特拉
夏季生存要素的動畫之一,最初看彼方的阿斯特拉還以為會變成無限的未知那樣的宇宙大逃殺式,考驗封閉環(huán)境里的人性關系,然而并沒有,不知不覺大家關系變得緊密,變得更像是宇宙探險片;突入后段以后,角色、歷史、世界的真相開始揭露以后,讓主題瞬間升華了,故事越發(fā)扣人心弦,雖然設定與最后的結局都過于理想化,但是看著他們一起經歷了這段旅程之后,理想化沒有什么不好的,能看到所有人都得到幸福就是最好的結局。最后這片不少笑點的插入真是合理而有趣,而且很好的緩沖了某些相對壓抑的劇情,讓這個故事整體顯得那么陽光和正能量。
57.Re:Stage!Dream Days?
本來以為這個偶像企劃只不過是個小企劃,畢竟很少見人說,要不是兩年前對鬼頭產生了興趣去谷歌了一下,知道了這企劃,然后還是和泉的人物原案,就記住了;今年難得動畫出了稍微看了一下,不知不覺倒也是看完了,蠻套路的偶像動畫,值得慶幸的是至少沒有像WUG二季那樣爆炸了,意外的很穩(wěn)健的做完了,雖然最后結局的live的部分有點廉價感,明明前面其實有幾場LIVE演出都不錯,還有一些手繪LIVE片段作畫挺好的,然而偏偏在結局拉胯了。
58.平凡職業(yè)成就世界最強
低成本制作的穿越異世界龍傲天輕改,戰(zhàn)斗靠劣質特效和3D效果糊弄,日常作畫和繪柄倒是不怎么崩,也算在有限成本下盡量做好的地方,前期奇遇 爬塔的劇情還是有點意思的,后面就是純粹主角強無敵的無腦爽片套路,女主雖然很貧但是很騷很可愛,幾位女角的CAST都很熟所以也算是個個人小看點。
59.為了女兒,我說不定連魔王都能干掉。
最初是為了kanonchan來看的這片,然后被這個女兒萌到,女兒好可愛啊好可愛啊,不得不說這片的劇情是真的平淡如水,就是純粹養(yǎng)女兒日常,而且基本沒有什么大波瀾,如果對女兒沒有愛的話,大概無法堅持看完吧。
60.致曾為神之眾獸
這片設定題材其實還有挺有意思的,然而劇情本身就很一般了,而且中盤基本每話都是同一個套路下去解決曾經的隊友,變得沉悶無趣,后期大BOSSU1登場以后雖然起了點波瀾,一波超展開以后又變了回去,動畫本身對劇本的處理也不好,加上制作本身也沒啥亮點,算是前期有所期待,但是最后頗為失望的作品。
61.擅長捉弄的高木同學 第二季
二季還是原來的味道,甚至撒狗糧更狠了,高木幾次操作我都覺得很直球了,可惜西片太木了,還好結尾西片終于A了上去,不容易啊;二季配角的戲份更多,很好的緩解了一直圍繞主角撒糖的審美疲勞。
62.科學的一方通行
直說我沖著chanrina來看的這片,然而chanrina的戲份太少了,所以我看得蠻不爽的,這片作畫也不怎么行,這主線劇情講的倒是挺直白,但是我并不覺得這個劇情多有趣,還不如多給點小信和chanrina的互動。
63.街角魔族
如果印象沒錯今年應該是芳文社動畫近年來最少的一年了,作為今年唯一的芳文社動畫,雖然很明顯能看出制作比較一般,但是動畫整體卻表現(xiàn)得很棒,高于一般水準的輕百合萌豚片,這不只是歸功于很本身很不錯的原作,也歸功于制作組的用心,對整體劇情規(guī)劃很走向,在有限作畫資源下還原原作優(yōu)點的演出,與及kokochan和阿卡林的精彩演繹;雖然有一些蘊含深意的背后設定,但是這季動畫并沒有很深入的去描寫,所以可以很輕松愉快的去享受本作;最后吐個槽,近幾年難得能在非子供向作品里這么輕松的看魔法少女題材動畫。
64.滿月之戰(zhàn)GRANBELM
百合 蘿卜的題材讓我不容錯過,整體制作水平也很不錯,作畫很穩(wěn),打戲也挺好看的,雖然有些地方特效過度看得有點花,蘿卜的機設不得不讓我想起魔神壇英雄傳;故事開局很打動我,中盤雖然有點殘酷,但是能接受,而且我不知為何始終抱持著希望,島袋和阿醬的百合糖我看得很爽,但是結局過于殘酷了,我本以為會是舞HIME那樣的結局,所以本質又是一個少女們的殘酷物語;這片CV陣容很不錯,還能看到姬樣,而且能聽到姬樣唱歌,簡直血賺。
65.拳愿阿修羅
熱血格斗動畫,這個3D制作水平已經算是日本TV動畫里難得的高水平了,充滿了暴力美學的打斗戲份,劇情完全為了打戲而服務沒有太多亮點就是搭了個擂臺賽,作為最大看點打戲,從頭到尾的高質量,不論是整體演出效果還是動作招式的流暢度,作為男性看下來簡直爽飛了,真是野性魅力滿載的動畫。
66.COP CRAFT
村田蓮爾的人物原案,賀東招二的原作,怎么就傍上了這么個爛制作,從第三話開始就一路走低,各種PPT和張數(shù)不夠的作畫看得我蛋疼,明明這個背景設定有點像黑衣人故事還是有值得一看的地方,而且村田的LOLI一直都很好舔,真的太遺憾了。
67.期待在地下城邂逅有錯嗎
保持在一般水平之上的輕改動畫,不過整體上不論制作還劇本都不如一季出彩,劇情很明顯有趕的痕跡,祈之助這次戲份沒一季那么路人,大西這次臺詞估計還不如一季的149WWWW
68.肌肉少女:啞鈴,能舉多少公斤
硬核健身宣傳片,劇情基本圍繞著各種健身科普,女主聲優(yōu)埃日混血的新人和界人是真健身達人,你們是真會找。
69.中之人基因組[實況中]
奇葩片,這破片設定上要是不拿什么直播做噱頭的話,應該不會顯得那么奇葩,這設定根本沒意義,只讓人覺得搞笑;整體上制作水平又不錯,本身劇情里也需要有太多很強的作畫戲份,保持繪柄很穩(wěn),不論男女人物美型,就是某羊駝太生草,加重片子的搞笑感。
70.君主?埃爾梅羅二世事件簿 魔眼收集列車
基于FATE世界觀與設定下的推理,作為非月球人只能感覺到不明覺厲,所以只能去舔魏霞馬的格蕾和祈之助妹妹就完事了。
71.海盜戰(zhàn)記
非常難得一見的富有厚重歷史感的傳記動畫,嚴謹?shù)墓适卤尘俺型邢碌膰烂C劇情,精良的制作通過背景美術、人物作畫、背景音樂、演出效果呈現(xiàn)出一個栩栩如生的維京時代;劇本基礎差不多是個以復仇為基調的人物成長傳記片,只不過這季動畫中盤以后的劇情,與其說是看復仇者托爾芬的復仇之路,還不如說是通過他的眼睛去看,身懷民族榮耀的阿謝拉德如何通過陰謀算計、忍辱負重去對維京人“復仇”,最后為了守護自己民族與榮耀而“獻身”,這季作為主角的托爾芬基本沒有什么大的心理成長,而且在最后還丟失此時此刻人參的最大目標,只能等二期了;最終話的演出非常有創(chuàng)意,那把劍閃回各種回憶片段之后留下新角色的二季伏筆,直到最后都保持著高水準。最后來吹一波小靜,在托爾茲事后的那段戲里,那段嘶吼實在震撼我心。
72.只要可愛即使是變態(tài)你也會喜歡我吧?
全員變態(tài)的后宮劇,有一定懸疑元素做噱頭,有些鏡頭運用很奇怪,感覺可能是為了展現(xiàn)變態(tài)這一特質?主要還是賣角色動畫,抖M巨乳癡女學姐的彩喵、抖S蘿莉學妹的chanrina、暴露狂妹妹的本渡等等。
73.女高中生的無所事事
讓我想起了男高日常,同樣的高質量的搞笑校園日常,只不過這片更加無厘頭,沒心沒肺一點,基本上笑點滿載,整季看得很開心;然后這CAST陣容也相當可以,松崗和島崎兩雖然是配角中配角,但是那段戲聯(lián)系兩中之人實在太過搞笑讓我印象深刻。
74.戰(zhàn)姬絕唱SYMPHOGEAR XV
期待已久最終季,雖然從4季開始劇情是越來越一般了,這季也是延續(xù)4季的情況,其實本身這個故事要續(xù)寫下來變成這樣也是蠻無可奈何的,但是這最終季拋出劇情不太出色的部分,作為粉絲來看可以說是接近完美收尾,滿滿的情懷,超贊無比的變身動畫,還看到三季的人偶回歸,甚至最期待的卡蘿再登場都有了,甚至還有新歌,一本滿足好么,延續(xù)作品風格的超燃最終戰(zhàn),以及最后等待許久的響爺與miku太太的糖,爽死了。(當然作為真正的結局還得等今年的LIVE啊)
75.魔術學姐
天然呆學姐通過犯蠢賣肉的福利短片,本渡楓這個學姐是真的很可愛而且很大,無法拒絕,而且篇幅不長,調劑生活情趣的作品很合適2333。
76.炎炎消防隊
作畫很屌很贊,打戲非常非常好看,只是這個劇情,很標準的少年漫風格,說不難看也不會,但是直到看完我都沒覺得太有趣?不知道是原作的鍋呢還是動畫腳本演出的鍋,前期是真沒看出來后期主角能力能到超光速,這個戰(zhàn)力提升可太屌了,而且有跡可循的這片主角群簡直弱勢群體,反派戰(zhàn)力感覺過于屌爆,我還是蠻好奇這個局勢要怎么翻的;還有不得不說這片的背景設定講述的太隱晦了。
77.異世界超能魔術師
套路到不能再套路的異世界穿越廁紙輕改,不論設定還是劇本,沒有任何可圈可點之處,各方面都很一般,可以說是非常標準的爛片了。
78.重來吧、魔王大人!
同樣是異世界穿越廁紙輕改,這片則是爛出了一種境界,作畫崩壞比上面那部多多了,劇情奇葩又傻屌,另辟蹊徑作為傻屌搞笑片去看或許還能體驗一波生草的快樂。
79.普通攻擊是全體攻擊而且能二次攻擊的媽媽你喜歡嗎?
這個賣媽片是真的有點微妙,老媽吊打全劇所有角色的設定,在某些段落不太能接受,母控片沒問題,但是我更希望看到的是展現(xiàn)母性魅力的母控片,而不是把老媽當做美少女去描寫,母親的身份只是一個設定。
80.騷動時節(jié)的少女們啊
這片看下來意外的覺得不錯,片中以女性的視點去看待青春期騷動與對性的萌芽,其實還蠻有意思的,雖然有多角戀的成分,但是實際從頭到尾都覺得某兩對穩(wěn)得一批,劇情上難免有夸張成分,還是在可接受范圍內,然后我很喜歡最后結局的演出,有種騷動時節(jié)少女們放肆青春的感覺。
2019秋
81.BEASTARS
年度最優(yōu)秀的3D TV動畫,全片好多段落能看到各種非常牛逼的動畫演出,比如第7話那段夢的演出,然后OP的定格動畫整體效果也好棒,讓我想起犬之島了,說實話這個時代除了一些實驗動畫和藝術廣告片,感覺都很少看到定格動畫了(也可能是我涉獵的少;說到這片劇情,看這片一定要代入片中獨特的世界觀去理解角色的行為邏輯,以現(xiàn)實的價值觀去看待角色的話,有些行為可能沒那么好接受,比如兔子;雖然兔子不錯,但是我還是好想看到阿醬的母狼贏,然而這并不可能。
82.Fairy gone 2
第二季嚴重改觀,第二季完整展現(xiàn)了世界觀以后,敘事上也更直接,相比第一季就好接受很多,幾個勢力,不同角色的行為邏輯變得更清晰,只不過百合入腦的我看到最后姬友沒了還是不太能接受,按這劇本是能猜到兩女主是莫得機會,關鍵是兩人的互動那臺詞,對百合入腦的人來說還挺甜;雖然二季有改觀,一二季整體講完整了一個還算能自洽的故事,但是這個故事感受上并不夠有趣,PA又一次原創(chuàng)作死了。
83.Fate/Grand Order 絕對魔獸戰(zhàn)線 巴比倫尼亞
有錢工期控制也不錯,所以作畫挺屌,女角色各種騷,打戲也挺好看的,作為非月球人看這些就蠻爽了,至于劇情挺無聊的,用了一季時間感覺主線劇情就沒怎么走過,男主某些行為我是真的看懵了,特別是跳樓那段,完全無法理解,純粉絲片非粉絲可能沒法GET到完整樂趣。
84.GRANBLUE FANTASY The Animation season2
同樣是粉絲片,GBF就比較好接受一點,畢竟劇本是傳統(tǒng)RPG套路,也沒有太過復雜的設定,比較好理解,這個二期整體感覺不如一期,包括制作和劇本,二期三章故事,第一章對百合入腦的我來說還算有點意思,第二章鬧鬧戲份稍微多一點感覺也還好,第三章就覺得稍微有點沉悶了,主要是第三章整體色調發(fā)灰,整個氣氛比較壓抑,故事本身也是。
85.心理測量者3
大型劇場版預告片,二季就已經開始顯現(xiàn)出問題了,就是一季鋪的世界觀是有局限性的,繼續(xù)續(xù)寫下去就會不可避免的出現(xiàn)一些細節(jié)上的矛盾,拋開這部分問題,作為一作嚴肅題材的正劇,這系列橫向對比還是一直保持著不錯的水平,雖然這季作為預告片主要以鋪墊為主;這季最佩服的地方是連著8周更新每話傳統(tǒng)TV動畫篇幅兩倍的真人劇時長的動畫,而且基本沒有什么太崩的地方,少數(shù)幾場狡哥的打戲也很好看,真不知道工期怎么把控的,太屌。
86.鴨子的天空
年番離完結還有點遠,不過90%會追完,基本是符合正常水平的體育番,只不過作為多年NBA觀眾,主角隊這個配置感覺問題很大,后期感覺依舊少不了各種挫折和被虐;kaji和內田弟從MIX一起擼完棒球接著來這打籃球可還行。
87.一弦定音!第二季
進入正題前先吹一波“天泣太特么好聽了!天泣太特么好聽了!”;二季整體劇情還是少女漫風格,兩對CP還有部員的互動都很甜,面對目標的決心與之相應的努力,也很有青春感,進入競賽戲份以后把古箏魅力全部展現(xiàn)出來,不止是《天泣》,對手曲子也是很好聽,只是《天泣》那段演出伴隨著兩季以來所有的回憶爆發(fā)出來,直擊心靈,真是感動到淚水自然而然的在眼眶打轉。沒錯這個動畫制作是不算好,作畫不怎么樣,故事也比較老套,但是兩季看完以后,伴隨主角一路走來,如果是比較感性的人能夠在最后兩話里收獲不少感動。
88.歌牌情緣3
多年等待終于能看到三季,又可以吃飯睡覺虐太一了;第三季整體還是那么穩(wěn),不論是制作水平還是劇本素質,角色們在穩(wěn)步成長與變化,比如太一對歌牌的態(tài)度,千早面對未來的選擇;前半季最后還被原田老師的戲份,他的堅持深深打動;這季幾場競技歌牌的演出依舊那么讓感到熱血崩張,這么多年的等待并沒有白等。
89.NULL & PETA
今年在TV動畫里整體缺少百合POWER,所以能在年底看到ajuju和魏霞馬共演的百合泡面動畫,就很快心,而且這片意外的在劇情上很有想法,前期看著像正常的輕松搞笑百合喜劇,到了后期反轉意外的能收貨不少感動,作為一部篇幅很短的泡面動畫,真的是意外的驚喜之作。
90.我們真的學不來!
正常看完這個第二季的人應該大部分對這個結局不太滿意吧,二季整體劇情在結尾之前部分其實比第一季我覺得要更有趣一點,學園祭的連環(huán)誤會有都合的成分,但是確實是蠻有趣的一段劇情設計;可是這個結尾操作是真的讓人無法可說,看著想要做個開放結局,卻又瘋狂暗示武原贏了,問題不是誰贏誰輸,而是兩季下來,正片中劇情里并沒法支撐武原贏了這個結尾,實在不懂這結尾是怎么想出來的,何況原作漫畫還沒完結呢,完全沒必要在這里留暗示性這么強烈的結局。(不過這片動畫就此完結最大的遺憾就是沒法再看到幾位CAST在NICO生放節(jié)目上一起玩游戲了)
91.刺客守則
制作素質嚴重不行,劇情跑火車,打戲能減就減,不能減的做的也不怎么樣,然后男女主的互動演出經常讓我覺得像是性轉版的黑執(zhí)事,然而這片整體素質可離黑執(zhí)事差太遠了。
92.碧藍航線
這應該是年度工期最爆炸的TV動畫了,快趕上那年的原書使了,真正用實力證明有錢并不能做出來好動畫,人脈和工期把控才是動畫制作不崩的基礎;僅以目前看到的內容來說,這片還是粉絲向為主,世界觀、人物、勢力之間狀態(tài)都沒有很詳細的解說,劇情作為非游戲玩家看著一臉懵逼,然后打戲真是一鍋亂燉大雜燴,真是各種類型的戰(zhàn)斗風格演出都有,其實看著還挺爽,就是不能去細究其中的邏輯問題;其實如果工期問題制作不太崩的話,這打戲和賣萌賣肉的戲份作為非粉絲來看應該也能看得爽,然而沒有如果;最后這片對我個人來說還有個大看點就是難得能在這TV動畫看到HO醬有這么多的戲份。
93.非洲的動物上班族
低成本高質量的社畜喜劇,用詼諧戲謔的方式以動物擬人夸張化演繹了社畜日常,而且基本都是現(xiàn)實中確實會遇到的種種案例;然后這片CAST陣容是真的屌,在最后甚至能聽到很久沒在TV動畫里聽到的若本叔。
94.高達創(chuàng)形者 再起
前中期真的覺得就是延續(xù)上一作的感覺,甚至覺得更子供向,直白點感覺劇情更弱智了,結果后期最后兩話直接把格局拉大了,人物刻畫也更深刻了,而且甚至有那么點正統(tǒng)派高達作品有的對戰(zhàn)爭深刻描寫,其實作為局外人的觀眾,前中期這個任務背景沒那么簡單,不是單純游戲任務,只是沒想到最后能引爆成這樣,這個反差真的驚喜;而且伴隨著劇情反轉以及最后兩話的刻畫,讓風見這個丑角變得越發(fā)真實;現(xiàn)在就看二期如何去演了,不要太拉跨的話應該能比上一作整體要好看很多,上一作是真的全程充滿嘈點。
95.拳愿阿修羅 第二季
延續(xù)了一期的高水準,依舊是熱血奔涌的暴力美學,只想說第三季什么時候來。
96.刀劍神域 Alicization篇 War of Underworld
依舊是高水準的制作,這期敘事節(jié)奏比上一期要好一點,更緊湊一點,只是這個劇情,好多段落我是真特么想笑....作為當年MMORPG游戲一路玩過的一員,RO、傳奇、奇跡、天堂二等等,我是能理解川原想要寫大型團戰(zhàn)、國戰(zhàn)PVP的渴望,但是這搭的舞臺實在邏輯上沒法說服我,最后只能不去細究劇本只當看著爽了,還好這期打戲不錯,女主角爭風吃醋的戲份也很有趣,然后后宮團也要開始正式上線了,期待第三期。(吐個槽,SAO作為新時代最富人氣,商業(yè)化程度最高的ACG作品之一,這愛麗絲篇我印象中沒記錯的話,從一開始的年番變成分割半年,現(xiàn)在又切了一刀半年變成兩季,不得不說動畫業(yè)界跟十年前真是差太多了)
97.非槍人生
背景設定有點賽博朋克感,大型企業(yè)、與之對應反差的貧民區(qū),還有機械義肢、義體等等賽博朋克的常見設定元素;只是故事水準就比較一般了,前期這個喜歡說空話的廢材男二蠻拉觀感的,中期那段設計兵器、英雄的劇情有點意思,只是這樣的故事在這一季的動畫里顯得分量太輕了;然后祈之助在這片的演的角色可以說全年里最讓我覺得特別的,雖然差不多是個路人,但是聽她口吐芬芳就覺得很爽2333
98.高分少女 第二季
延續(xù)一期的高水準,最后在非常優(yōu)秀的演出下完結,又收割到了我的眼淚;作為一個直男,最后那段劇情,下定決意的一場戰(zhàn)斗輸了,喜歡的女孩子可能未來難再相見,面對退回的戒指,靠自己奮發(fā)理解大野的真意挺難的;所以小春的出場推一把真的很重要,然而這段戲對小春真的太不友好了,從第一季就知道小春注定贏不了,但是小春真的太好了,真的不想看到她被虐,心疼。
99.巴比倫
一部探討善與惡和生死觀的嚴肅正劇動畫,劇情必然會存在爭議,而且有怪力亂神的成分,再加上二章最后第7話的虐殺戲份,更加加深了爭議;劇情方面?zhèn)€人看法覺得還好,第一章的善惡辯論、和第二章自殺法辯論都蠻有意思的,還有考哥那段對魅惑描述簡直斯巴拉西;然后劇情以外不得不吹一波這片的演出是真的屌,特別是第二話的演出,通過倒敘插敘、畫面比例變化運用、意象化的圖像等等手法,將一場問訊做得非常好看,而且作畫也HOLD住了,角色演技的各種細微表情表現(xiàn)得惟妙惟肖,還有第7話最后虐殺的戲份通過交叉蒙太奇更加加深其中的殘忍;鑒于第三章的第8話剛出,而且格局拉大了,對后期劇情持謹慎態(tài)度,大概率會有更爭議的內容,而且崩的可能性不小;單純的很想推薦一下對動畫演出感興趣的人可以去看看第二話。
100.美妙射擊部
這片制作上很有那年后街女孩的感覺,基本就是PPT,射擊題材的美少女輕百合動畫,時代告訴我們美少女輕百合是個框什么題材都能往里面套,CAST陣容告訴我們這片本質是百萬片場。
101.夢幻之星online2
網游改編動畫,純粉絲片,非粉絲看下來有一定困難,上半季的前中期便當送的有點勤,而且這劇的價值觀有點難把握,有人便當完了以后好像劇中人沒啥感覺似的,接著該干嘛干嘛,可是后面看又希望盡可能的保護拯救所有人,感覺前后價值觀錯亂,可能演出的鍋,后面涉及時間穿越劇情比起之前的劇情更有意思一點,下半季還是有一定看點的。
102.虛空魔境 第二季
這個二季感覺還是一季那個問題,就是老套的王道少年漫,劇情沒有太大的創(chuàng)意,缺乏變數(shù),然后節(jié)奏又死慢,用了一整季的時間就是男主在閉關練級,放回二十年前這樣演或許可以,放現(xiàn)在這樣演可太特么悶了,而且這季凹醬戲份少了很多,只看玉米粒飲鴆止渴可特么難頂了。
103.七大罪 諸神的逆鱗
跟原作一樣動畫也是一路走低水準,該說還蠻相配?原作最好的部分也是一期做得最好的時候,我從一期結束開始追漫畫到現(xiàn)在,原作劇情是真的一路慢慢拉胯,反正就是正反派互相演,互相爭奧斯卡影帝影后,邏輯什么的喂狗去吧,雖然也有一些比較感人的劇情,比如這季動畫里團長和傻白3000年的經歷,然并卵整體的劇情是真不行,所以動畫本身也就看著消遣,剛好動畫從二期開始制作就一路掉價,這季也就沒什么意外的了;這動畫現(xiàn)在最大的貢獻就是每年的EVENT,畢竟有不少病友,還像kaji的士下座這種老梗。
104.喜歡本大爺?shù)木谷痪湍阋粋€?
整體水平還不錯的輕改后宮喜劇動畫,前期的反套路和后期的對決所謂真后宮男主還是有點意思,那一張一直出現(xiàn)的長椅蠻有趣的,結局作為一部TV動畫的結尾,操作有點騷,希望今年那個所謂的SP能做完結局,幾位女主都蠻可愛的,而且人設很好看,動畫的作畫也挺穩(wěn),沒怎么崩,CAST陣容也不錯。
105.我的英雄學院 第四季
4期了,動畫開始要進入骨頭用力也救不回來的戲份了,而且這季從時間上推算,我猜測應該是在做4期動畫的同期把資源都花去做劇場版了吧,這上半季整體制作水平不如之前三季了;劇情方面,這上半季剛好做到了個人看法原作最后一段能看的劇情上了,百萬這個角色創(chuàng)作出來真是嚴重打臉主角,如果沒有百萬主角那些問題不會這么明面的甩出來;因為我是在出久甩出鞭子以后棄坑的,所以后面不太清楚,不過至少動畫從這里開始后面學園祭、AB班混合訓練真不怎么樣,就看骨頭能救回多少了。
106.慎重勇者 ~這個勇者明明超強卻過分慎重~
很有趣的異世界穿越輕改喜劇,前中期傻屌劇情能收獲不少簡簡單單的快樂,最后的劇情反轉還很有感人要素,又能收獲點滴感動,算是難得的水準之上的輕改作品;akichan在這作也貢獻了超贊的表演。
107.戰(zhàn)×戀
從設定上就是毫不掩飾的純粹賣肉動畫,這個節(jié)能自閉陽痿男主是看著人腦殼疼,禁不住這個CAST陣容非常不錯,而且有最喜歡的chanrina,而且還戲份不少,這賣肉劇情又相當直白,能聽到不少牙白的內容,所以看完還是覺得不怎么虧的。
108.放學后桌游俱樂部
不懂桌游,在我看來這片算是蠻“硬核”的桌游科普片,然而劇情實在有點水,看完我印象最深的還是第一話marinka的真空逛街,與及最終話的莫名其妙自閉。
109.旗揚!獸道
作為成立不久的新動畫公司ENGI的第一部TV動畫,整體表現(xiàn)還是不錯的,制作上很穩(wěn),就是作為一部穿越異世界的搞笑片,中期的段子有點重復和平淡不那么有趣,我很想說你就不能對公主好一點233公主人設那么可愛,最后都快調教成變態(tài)抖M了。
110.星合之空
可能是今年最遺憾的TV動畫作品,遺憾的是因為大人的原因可能沒法看到后半季,沒法看到它完整的樣子;我真的蠻喜歡這片的,臺面上的打網球非常有體育作品的優(yōu)點,有少年揮灑汗水的青春,有比賽時的澎湃熱血,而且打網球演出作畫也不錯,雖然明顯能看出不少兼用卡;臺面下的家庭倫理戲也很有想法,蠻有看點的,只是最關鍵的如何解決的戲份看不到,所以對這部分的戲份就無從評價了;最后不得不吐槽,怎么你們一個網球部,就全員集齊的家庭問題,莫不是被詛咒了2333
111.書蟲的下克上~為了成為圖書管理員而不擇手段~
制作上差強人意,低開高走,意外的還不錯的穿越輕改,前期女主所謂的書蟲卻有不少感覺上沒有常識的行為,配上偏子供向風格的人設,感覺有點有點弱智,中后期智商上線,開始造東西以后倒是有趣不少,雖然制作上有限,但是動畫演出與中后期劇情表現(xiàn)出舒適感,讓人看著還挺暖的。
112.歌舞伎町夏洛克
最開始被這個落語推理的新奇設定吸引,然而前中期的單元劇劇情過于戲謔,不懂為什么一定要把這些配角偵探塑造成小丑,最初設定上的所謂推理對決在這樣塑造下根本無法成立,后期主線以后劇本質量才開始提高,變得有趣,有跡可循猜測下半期劇本估計還是會落到福爾摩斯和莫里亞蒂的對決上,所以這些配角偵探感覺只會越來越邊緣化,就看會不會是真的這樣演了;目前看這片制作不錯,作畫演出尚可,主線劇情有不少看點,就看下半季的表現(xiàn)了;最后吹一波,村瀨步的女聲太特么屌了,然后鬧鬧又要風評被害了WWWW
113.無限之住人
應該是年度血漿度最高的動畫,看過舊版動畫,但是沒看過原作漫畫,目前看整體表現(xiàn)還行,特別是血漿的表現(xiàn)上,然后在制作上能看出想靠演出效果去盡力還原一個武士時代,就是劇情銜接上感覺有問題,能感覺有一定的劇情刪減。
114.廚神小當家
童年粉碎機,刪刪減減一整季,結果還沒做完麻婆豆腐,靠著僅有的一點情懷看完了。
115.神田川JET GIRLS
ATX限定,看似跟那年的側車搭檔很像,同樣虛構一門女女搭檔競速的競技,也有百合要素,然而這片更加專注于賣肉上了,射擊爆衣的設定不言自明,所以主要看點還是奶子。
116.我,不是說了能力要平均值么!
異世界穿越女傲天,本以為會是個百合片,結果是個純正NETA片,問題是全靠NETA要撐起一季動畫哪有那么容易,所以中后期不可避免的膩味了,而且這個冒險日常是真的很白開水,然后最后的結局劇情告訴觀眾我是有主線的,只不過剛剛邁出起點,就很囧;亜方逸樹的人物原案很可愛,動畫還是有表現(xiàn)出這份可愛的。
117.超人高校生在異世界也可以活的風生水起!
一流制作,三流劇本,就是放開大腦去看也能被生草的劇情搞笑,比如后方甩電磁炮前方劍盾堆人頭,然后還有那個人工制導導彈,操作太騷了;不得不說這片的制作太好,印象很深的某一話男主跟某配角talk戲份演出甚至有余力畫一段幼女在嬉戲,賣肉賣萌的戲份和作畫都不錯, 矢野茜畫奶子無法拒絕,chanrina的賣萌回更加無法拒絕,所以這片我個人看完還是很爽的;最后吐個槽矢野茜三次總作監(jiān)全都有chanrina你們可真有緣,與及小靜小林難得又一次共演又不是一對真是遺憾233
118.銀河英雄傳說 Die Neue These 星亂 第2章
總體上保持了一季原來的水準,就是這季戰(zhàn)斗戲份感覺頗水,比較一般,文戲倒還好雖然有一定的劇情壓縮,大公過世以后mamo那段演技真的贊。
119.食戟之靈 神之皿
最想說的是在這季結束多好,何必一定要去出下一季的藥哥篇呢,藥哥篇是真的不怎么樣,只能說食戟這待遇真好;這季動畫算是延續(xù)了二三季的水平吧,作為美食動畫關鍵的菜品繪柄一直都很穩(wěn),讓人很有食欲,食戟賣點爆衣演出也依然穩(wěn)定,劇情就是以趕為主了,不過本來這劇情也是越來越沒新意了,沒什么意思,所以趕點還是蠻合理的。
120.入間同學入魔了
從人設、色指定、背景美術、劇情上看有種復古十幾年前的搞笑動畫的感覺,目前半季下來整體很穩(wěn)健,搞笑的段子水平一直在線,算是蠻有水平的搞笑片。
總體上這一年比較不夠爽的地方就是整體缺少百合POWER,作為百合入腦患者今年多少有點遺憾,希望明年的安島不要太讓我失望。
花了一周多的時間,斷斷續(xù)續(xù)又碼了一萬多字,可特么廢了我好多腦細胞,需要再去刷一遍今年的24小時不準笑,再好好輕松一下。

原版巴巴多斯只在加勒比海最東

來源:申江服務導報

“浩瀚的太平洋上,灑落著顆顆明珠,貝勞共和國就是……”這句《大撒把》里的經典臺詞,用在最近挺熱鬧的某旅游網站“8萬打車費”事件中,可以改成“浩瀚的加勒比海上,灑落著顆顆明珠,巴巴多斯就是最迷人的那一個……”沒錯,正宗的巴巴多斯,是個島國,不在俄羅斯,也不在希臘,而是在絕美的加勒比海上。

“一生必去”蕾哈娜的故鄉(xiāng)

巴巴多斯(英語:Barbados)是位于加勒比海與大西洋邊界上的獨立的島嶼國家,是西印度群島最東端的島嶼,首都布里奇頓。島嶼面積430平方公里,主要是低地,在島的內陸有一些山丘。

1518年西班牙人登島,而十年之后這座島嶼又被葡萄牙人占領,“巴巴多斯”就是起源于葡語,用來描繪島上遍地都是野生無花果樹的場景。之后,這里成為英屬殖民地,島上的風土人情還都保留著英國殖民的痕跡,人稱加勒比小英格蘭。

千萬不要小看這片彈丸之地,如今,這片原本被稱為“殖民者的糧倉”的肥沃土地,成為了一個真正意義上的發(fā)達國家——人均GDP將近兩萬美元。BBC把這里評選為“一生必去的50個國家”之一。

因為特殊的地理優(yōu)勢,這里颶風很少,日平均最高氣溫26℃,日平均降雨量少于0.25英寸,年日照量達到3000小時!很難想象,世界上還有其他地方能擁有比巴巴多斯更完美的氣候。也正因為此,這里也是歐美明星的度假勝地。悄悄說一句,巴巴多斯還是蕾哈娜的故鄉(xiāng)哦。

白天玩海,晚上浪個夜生活

這座珊瑚石灰?guī)r海島是加勒比海諸島的旅游勝地,東西南三面環(huán)海,西邊海域風浪較小,適合游泳、出海和潛水,海面清澈見底。不用深潛,就能浮潛著探索豐富的海底生物和珊瑚礁,也可以乘坐潛水艇去海底探尋失事的沉船,甚至是和海龜一起在加勒比海游泳!而東部及南部海域則風急浪高,適合沖浪,超多歐美巨星經常會來這里沖浪,切磋技藝。

除了玩海,還能在島上尋訪殖民時期的遺跡,參觀巴巴多斯博物館,國家英雄廣場(原特拉法加廣場)和西半球最古老的猶太教堂,還有喬治華盛頓住過的房子和做禮拜的教堂。島上的風土人情,還保留有英國殖民的痕跡。

首府布里奇頓有很多購物的地方。布里奇頓游船碼頭有免稅購物商場,在布羅德街還有高檔時裝店。其它活動包括游艇,垂釣,觀看板球比賽,還有巴克斯特路的夜生活。

巴巴多斯的物價比國內高,接近歐洲水平。但南邊的酒店和交通會比較便宜,豪華酒店則集中在西海岸的St.Jam es區(qū),且大多擁有私人海灘,也是明星狗仔隊云集之地。

巴巴多斯更適合自駕游,但道路比較窄,路標經常看不清,容易迷路。但當?shù)鼐用穸己軣崆椋竽懴蛩麄儐柭钒桑麄兌贾v英語的哦。

喝海盜之酒,飛魚料理當零食

而夜生活里最不能缺少的,就是朗姆酒,巴巴多斯的特產。以甘蔗為原料釀制蒸餾而成,也被稱為“海盜之酒”,傳說是海盜們最喜歡的飲品!來巴巴多斯的游客一般都不會放棄品嘗美酒的機會。

巴巴多斯島上盛產甘蔗,甘蔗種植面積占全島可耕地面積的五分之四以上。每年6月的最后三個星期至7月的第一個周末,巴巴多斯人民為了慶祝甘蔗的豐收都。

會舉辦非常隆重的甘蔗節(jié)。

當年看《少年派的奇幻漂流》時,里面的飛魚場景也非常令人印象深刻。珊瑚島國巴巴多斯正是盛產飛魚的地方。這里的飛魚種類近100種,小的不過手掌大,大的有2米多長。

作為“國魚”,飛魚在當?shù)貥O受歡迎,漁民們每天出海主要是為了捕捉飛魚,甚至連國徽上都有飛魚的身影。飛魚料理也是巴巴多斯的一大特色,去到那兒一定要試一試,可蒸可炸,肉質鮮嫩。在當?shù)丶猩线€可以買到用新鮮飛魚肉做成的炸魚丸,這幾乎是所有巴巴多斯人最喜愛的零食了,甚至電影院的小賣部也會出售呢。

巴巴多斯的Oistins海邊小鎮(zhèn)上每周五晚上6點后會有一個海鮮市場,可以吃到很多當?shù)靥厣暮ur燒烤。當?shù)厝撕陀慰投及堰@里當做周末派對,很多人更是伴隨著加勒比風格的音樂載歌載舞。

搭加勒比郵輪

那么問題來了,人少景美的巴巴多斯,要怎么去呢?

2017年6月1日起,中國公民持有效護照可免簽入境巴巴多斯,停留期不超過30天。入境時需要提供有效護照、回程機票、在巴住宿信息,同時可能會被要求出示在巴旅行費用證明(如現(xiàn)金或信用卡等)。

但是需要注意的是,雖然免簽了,但是由于中國并沒有直飛巴巴多斯的航班,需要先到美國、加拿大等國家轉機,還需提前辦理美國、加拿大的簽證才能前往。

目前國內還沒有直飛巴巴多斯的航班,大多數(shù)航班都會在倫敦或美國轉機,單程飛行時間經常高達30 小時。更致命的是,機票價格還奇貴,2個月后的往返含稅機票價格大約在1.1萬元左右。

當然,兩全其美的平價解決方案也不是沒有,那就是搭乘加勒比海航線的郵輪,包吃包住的價格,比單買一張往返機票都便宜。在浩瀚的加勒比海上,郵輪就像是穿梭巴士,分別停靠不同的島嶼國家,你只要選擇喜歡的線路就可以了。加勒比海郵輪生意常年奇好,迪士尼、公主和地中海這幾家,不提前3個月到半年,都訂不到合適的日期和艙位。

到私人島嶼一定要打卡

除了古巴、牙買加這樣的大國,一般島國一天玩下來妥妥的。一圈郵輪下來,目的地清單上,又能多好幾個加勒比國家。

比如,去拿騷看這個著名的粉紅沙灘。去加勒比海上真正的瑰寶圣巴茨,既時尚又酷炫。在這里,你有機會見到很多名人。巨星碧昂斯和Jay-Z在圣巴茨島兩次被認出,保羅·麥卡特尼與亞瑟小子也曾在這里被偶遇,林賽·羅韓在這里發(fā)過一張穿性感比基尼的照片……

開曼群島也一定要去,加勒比海地區(qū)最好的浮潛和深潛區(qū)域之一。在首府喬治敦附近探索Cali沉船,在Rum Point的珊瑚花園與海龜交流,或是在刺鰩城的淺灘給鰩形目喂食。在渺無人煙的大開曼北部海岸騎馬或游泳,那種浪漫也如夢似幻。

還有一個島,不去就虧了。那就是巴哈馬,這里有一堆郵輪公司的私人島嶼,只有郵輪游客才能享用的,而且島上各種吃喝不額外收費,玩樂收費相當白菜。

比如,地中海郵輪的Ocean Cay大洋島,諾唯真郵輪的Great Stirrup Cay,迪士尼郵輪的Castaw ay Cay漂流島以及公主郵輪的Princess Cay公主島。

不用想要去哪里,也不必擔心走錯了路無法回船。很純粹的放松,很純粹的休閑。島上的設施相當完善,且非常環(huán)保。帶上一本書,坐在躺椅上,吹吹海風。選一個感興趣的水上項目,與大海來次親密接觸,或是就在酒吧,點上一杯椰子雞尾酒,啥也不干啥也不想,加勒比海盜的快活與肆意,大抵如此吧。(董韻怡 夏蕾蒂)

Netty如何做到單機百萬并發(fā)?

相信很多人知道石中劍這個典故,在此典故中,天命注定的亞瑟很容易的就拔出了這把石中劍,但是由于資歷不被其他人認可,所以他頗費了一番周折才成為了真正意義上的英格蘭全境之王,亞瑟王。

說道這把劍,劍身上銘刻著這樣一句話:ONLY THE KING CAN TAKE THE SWORD FROM THE STONE。

雖然典故中的 the king 是指英明之主亞瑟王,但是在本章中,這個 king 就是讀者自己。

我們今天不僅要從百萬并發(fā)基石上拔出這把 epoll 之劍,也就是 Netty,而且要利用這把劍大殺四方,一如當年的亞瑟王憑借此劍統(tǒng)一了英格蘭全境一樣。

說到石中劍 Netty,我們知道他極其強悍的性能以及純異步模型,釋放出了極強的生產力,內置的各種編解碼編排,心跳包檢測,粘包拆包處理等,高效且易于使用,以至于很多耳熟能詳?shù)慕M件都在使用,比如 Hadoop,Dubbo 等。

但是他是如何做到這些的呢?本章將會以庖丁解牛的方式,一步一步的來拔出此劍。

Netty 的異步模型

說起 Netty 的異步模型,我相信大多數(shù)人,只要是寫過服務端的話,都是耳熟能詳?shù)模琤ossGroup 和 workerGroup 被 ServerBootstrap 所驅動,用起來簡直是如虎添翼。

再加上各種配置化的 handler 加持,組裝起來也是行云流水,俯拾即是。但是,任何一個好的架構,都不是一蹴而就實現(xiàn)的,那她經歷了怎樣的心路歷程呢?

①經典的多線程模型

此模型中,服務端起來后,客戶端連接到服務端,服務端會為每個客戶端開啟一個線程來進行后續(xù)的讀寫操作。

客戶端少的時候,整體性能和功能還是可以的,但是如果客戶端非常多的時候,線程的創(chuàng)建將會導致內存的急劇飆升從而導致服務端的性能下降,嚴重者會導致新客戶端連接不上來,更有甚者,服務器直接宕機。

此模型雖然簡單,但是由于其簡單粗暴,所以難堪大用,建議在寫服務端的時候,要徹底的避免此種寫法。

②經典的 Reactor 模型

由于多線程模型難堪大用,所以更好的模型一直在研究之中,Reactor 模型,作為天選之子,也被引入了進來,由于其強大的基于事件處理的特性,使得其成為異步模型的不二之選。

Reactor 模型由于是基于事件處理的,所以一旦有事件被觸發(fā),將會派發(fā)到對應的 event handler 中進行處理。

所以在此模型中,有兩個最重要的參與者,列舉如下:

Reactor:主要用來將 IO 事件派發(fā)到相對應的 handler 中,可以將其想象為打電話時候的分發(fā)總機,你先打電話到總機號碼,然后通過總機,你可以分撥到各個分機號碼。

handlers:主要用來處理 IO 事件相關的具體業(yè)務,可以將其想象為撥通分機號碼后,實際上為你處理事件的員工。

上圖為 Reactor 模型的描述圖,具體來說一下:

Initiation Dispatcher 其實扮演的就是 Reactor 的角色,主要進行 Event Demultiplexer,即事件派發(fā)。

而其內部一般都有一個 Acceptor,用于通過對系統(tǒng)資源的操縱來獲取資源句柄,然后交由 Reactor,通過 handle_events 方法派發(fā)至具體的 EventHandler 的。

Synchronous Event Demultiplexer 其實就是 Acceptor 的角色,此角色內部通過調用系統(tǒng)的方法來進行資源操作。

比如說,假如客戶端連接上來,那么將會獲得當前連接,假如需要刪除文件,那么將會獲得當前待操作的文件句柄等等。

這些句柄實際上是要返回給 Reactor 的,然后經由 Reactor 派發(fā)下放給具體的 Eventhandler。

Event Handler 這里,其實就是具體的事件操作了。其內部針對不同的業(yè)務邏輯,擁有不同的操作方法。

比如說,鑒權 EventHandler 會檢測傳入的連接,驗證其是否在白名單,心跳包 EventHanler 會檢測管道是否空閑。

業(yè)務 EventHandler 會進行具體的業(yè)務處理,編解碼 EventHandler 會對當前連接傳輸?shù)膬热葸M行編碼解碼操作等等。

由于 Netty 是 Reactor 模型的具體實現(xiàn),所以在編碼的時候,我們可以非常清楚明白的理解 Reactor 的具體使用方式,這里暫時不講,后面會提到。

由于 Doug Lea 寫過一篇關于 NIO 的文章,整體總結的極好,所以這里我們就結合他的文章來詳細分析一下 Reactor 模型的演化過程。

上圖模型為單線程 Reator 模型,Reactor 模型會利用給定的 selectionKeys 進行派發(fā)操作,派發(fā)到給定的 handler。

之后當有客戶端連接上來的時候,acceptor 會進行 accept 接收操作,之后將接收到的連接和之前派發(fā)的 handler 進行組合并啟動。

上圖模型為池化 Reactor 模型,此模型將讀操作和寫操作解耦了出來,當有數(shù)據(jù)過來的時候,將 handler 的系列操作扔到線程池中來進行,極大的提到了整體的吞吐量和處理速度。

上圖模型為多 Reactor 模型,此模型中,將原本單個 Reactor 一分為二,分別為 mainReactor 和 subReactor。

其中 mainReactor 主要進行客戶端連接方面的處理,客戶端 accept 后發(fā)送給 subReactor 進行后續(xù)處理處理。

這種模型的好處就是整體職責更加明確,同時對于多 CPU 的機器,系統(tǒng)資源的利用更加高一些。

從 Netty 寫的 server 端,就可以看出,boss worker group 對應的正是主副 Reactor。

之后 ServerBootstrap 進行 Reactor 的創(chuàng)建操作,里面的 group,channel,option 等進行初始化操作。

而設置的 childHandler 則是具體的業(yè)務操作,其底層的事件分發(fā)器則通過調用 Linux 系統(tǒng)級接口 epoll 來實現(xiàn)連接并將其傳給 Reactor。

石中劍 Netty 強悍的原理(JNI)

Netty 之劍之所以鋒利,不僅僅因為其純異步的編排模型,避免了各種阻塞式的操作,同時其內部各種設計精良的組件,終成一統(tǒng)。

且不說讓人眼前一亮的緩沖池設計,讀寫標隨心而動,摒棄了繁冗復雜的邊界檢測,用起來著實舒服之極。

原生的流控和高低水位設計,讓流速控制真的是隨心所欲,鑄就了一道相當堅固的護城河。

齊全的粘包拆包處理方式,讓每一筆數(shù)據(jù)都能夠清晰明了;而高效的空閑檢測機制,則讓心跳包和斷線重連等設計方案變得如此俯拾即是。

上層的設計如此優(yōu)秀,其性能又怎能甘居下風。由于底層通訊方式完全是 C 語言編寫,然后利用 JNI 機制進行處理,所以整體的性能可以說是達到了原生 C 語言性能的強悍程度。

說道 JNI,這里我覺得有必要詳細說一下,他是我們利用 Java 直接調用 C 語言原生代碼的關鍵。

JNI,全稱為Java Native Interface,翻譯過來就是 Java 本地接口,他是 Java 調用 C 語言的一套規(guī)范。具體來看看怎么做的吧。

步驟一,先來寫一個簡單的 Java 調用函數(shù):

/**
* @author shichaoyang
* @Description: 數(shù)據(jù)同步器
* @date 2020-10-14 19:41
*/
public class DataSynchronizer {
/**
* 加載本地底層C實現(xiàn)庫
*/
static {
System.loadLibrary("synchronizer");
}
/**
* 底層數(shù)據(jù)同步方法
*/
private native String syncData(String status);
/**
* 程序啟動,調用底層數(shù)據(jù)同步方法
*
* @param args
*/
public static void main(String... args) {
String rst = new DataSynchronizer().syncData("ProcessStep2");
System.out.println("The execute result from C is : " rst);
}
}

可以看出,是一個非常簡單的 Java 類,此類中,syncData 方法前面帶了 native 修飾,代表此方法最終將會調用底層 C 語言實現(xiàn)。main 方法是啟動類,將 C 語言執(zhí)行的結果接收并打印出來。

然后,打開我們的 Linux 環(huán)境,這里由于我用的是 linux mint,依次執(zhí)行如下命令來設置環(huán)境:

執(zhí)行apt install default-jdk 安裝java環(huán)境,安裝完畢。

通過update-alternatives --list java 獲取java安裝路徑,這里為:/usr/lib/jvm/java-11-openjdk-amd64

設置java環(huán)境變量 export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

環(huán)境設置完畢之后,就可以開始進行下一步了。

步驟二,編譯,首先,進入到代碼 DataSynchronizer.c 所在的目錄,然后運行如下命令來編譯 Java 源碼:

javac -h . DataSynchronizer.java

編譯完畢之后,可以看到當前目錄出現(xiàn)了如下幾個文件:

其中 DataSynchronizer.h 是生成的頭文件,這個文件盡量不要修改,整體內容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class DataSynchronizer */
#ifndef _Included_DataSynchronizer
#define _Included_DataSynchronizer
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: DataSynchronizer
* Method: syncData
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_DataSynchronizer_syncData
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif

其中 JNIEXPORT jstring JNICALL Java_DataSynchronizer_syncData 方法,就是給我們生成的本地 C 語言方法,我們這里只需要創(chuàng)建一個 C 語言文件,名稱為 DataSynchronizer.c。

將此頭文件加載進來,實現(xiàn)此方法即可:

#include <jni.h>
#include <stdio.h>
#include "DataSynchronizer.h"

JNIEXPORT jstring JNICALL Java_DataSynchronizer_syncData(JNIEnv *env, jobject obj, jstring str) {
// Step 1: Convert the JNI String (jstring) into C-String (char*)
const char *inCStr = (*env)->GetStringUTFChars(env, str, NULL);
if (NULL == inCStr) {
return NULL;
}

// Step 2: Perform its intended operations
printf("In C, the received string is: %sn", inCStr);
(*env)->ReleaseStringUTFChars(env, str, inCStr); // release resources

// Prompt user for a C-string
char outCStr[128];
printf("Enter a String: ");
scanf("%s", outCStr);

// Step 3: Convert the C-string (char*) into JNI String (jstring) and return
return (*env)->NewStringUTF(env, outCStr);
}

其中需要注意的是,JNIEnv* 變量,實際上指的是當前的 JNI 環(huán)境。而 jobject 變量則類似 Java 中的 this 關鍵字。

jstring 則是 C 語言層面上的字符串,相當于 Java 中的 String。整體對應如下:

最后,我們來編譯一下:

gcc -fPIC -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libsynchronizer.so DataSynchronizer.c

編譯完畢后,可以看到當前目錄下又多了一個 libsynchronizer.so 文件(這個文件類似 Windows 上編譯后生成的 .dll 類庫文件):

此時我們可以運行了,運行如下命令進行運行:

java -Djava.library.path=. DataSynchronizer

得到結果如下:

java -Djava.library.path=. DataSynchronizer
In C, the received string is: ProcessStep2
Enter a String: sdfsdf
The execute result from C is : sdfsdf

從這里看到,我們正確地通過 java jni 技術,調用了 C 語言底層的邏輯,然后獲取到結果,打印了出來。

在 Netty 中,也是利用了 jni 的技術,然后通過調用底層的 C 語言邏輯實現(xiàn),來實現(xiàn)高效的網絡通訊的。

感興趣的同學可以扒拉下 Netty 源碼,在 transport-native-epoll 模塊中,就可以見到具體的實現(xiàn)方法了。

IO 多路復用模型

石中劍,之所以能蕩平英格蘭全境,自然有其最強悍的地方。

相應的,Netty,則也是不遑多讓,之所以能夠被各大知名的組件所采用,自然也有其最強悍的地方,而本章節(jié)的 IO 多路復用模型,則是其強悍的理由之一。

再說 IO 多路復用模型之前,我們先來大致了解下 Linux 文件系統(tǒng)。

在 Linux 系統(tǒng)中,不論是你的鼠標,鍵盤,還是打印機,甚至于連接到本機的 socket client 端,都是以文件描述符的形式存在于系統(tǒng)中,諸如此類,等等等等。

所以可以這么說,一切皆文件。來看一下系統(tǒng)定義的文件描述符說明:

從上面的列表可以看到,文件描述符 0,1,2 都已經被系統(tǒng)占用了,當系統(tǒng)啟動的時候,這三個描述符就存在了。

其中 0 代表標準輸入,1 代表標準輸出,2 代表錯誤輸出。當我們創(chuàng)建新的文件描述符的時候,就會在 2 的基礎上進行遞增。

可以這么說,文件描述符是為了管理被打開的文件而創(chuàng)建的系統(tǒng)索引,他代表了文件的身份 ID。對標 Windows 的話,你可以認為和句柄類似,這樣就更容易理解一些。

由于網上對 Linux 文件這塊的原理描述的文章已經非常多了,所以這里我不再做過多的贅述,感興趣的同學可以從 Wikipedia 翻閱一下。

由于這塊內容比較復雜,不屬于本文普及的內容,建議讀者另行自研。

select 模型

此模型是 IO 多路復用的最早期使用的模型之一,距今已經幾十年了,但是現(xiàn)在依舊有不少應用還在采用此種方式,可見其長生不老。

首先來看下其具體的定義(來源于 man 二類文檔):

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);

這里解釋下其具體參數(shù):

參數(shù)一:nfds,也即 maxfd,最大的文件描述符遞增一。這里之所以傳最大描述符,為的就是在遍歷 fd_set 的時候,限定遍歷范圍。

參數(shù)二:readfds,可讀文件描述符集合。

參數(shù)三:writefds,可寫文件描述符集合。

參數(shù)四:errorfds,異常文件描述符集合。

參數(shù)五:timeout,超時時間。在這段時間內沒有檢測到描述符被觸發(fā),則返回。

下面的宏處理,可以對 fd_set 集合(準確地說是 bitmap,一個描述符有變更,則會在描述符對應的索引處置 1)進行操作:

FD_CLR(inr fd,fd_set* set) :用來清除描述詞組 set 中相關 fd 的位,即 bitmap 結構中索引值為 fd 的值置為 0。

FD_ISSET(int fd,fd_set *set):用來測試描述詞組 set 中相關 fd 的位是否為真,即 bitmap 結構中某一位是否為 1。

FD_SET(int fd,fd_set*set):用來設置描述詞組 set 中相關 fd 的位,即將 bitmap 結構中某一位設置為 1,索引值為 fd。

FD_ZERO(fd_set *set):用來清除描述詞組 set 的全部位,即將 bitmap 結構全部清零。

首先來看一段服務端采用了 select 模型的示例代碼:

//創(chuàng)建server端套接字,獲取文件描述符
int listenfd = socket(PF_INET,SOCK_STREAM,0);
if(listenfd < 0) return -1;

//綁定服務器
bind(listenfd,(struct sockaddr*)&address,sizeof(address));
//監(jiān)聽服務器
listen(listenfd,5);

struct sockaddr_in client;
socklen_t addr_len = sizeof(client);

//接收客戶端連接
int connfd = accept(listenfd,(struct sockaddr*)&client,&addr_len);

//讀緩沖區(qū)
char buff[1024];

//讀文件操作符
fd_set read_fds;

while(1)
{
memset(buff,0,sizeof(buff));

//注意:每次調用select之前都要重新設置文件描述符connfd,因為文件描述符表會在內核中被修改
FD_ZERO(&read_fds);
FD_SET(connfd,&read_fds);

//注意:select會將用戶態(tài)中的文件描述符表放到內核中進行修改,內核修改完畢后再返回給用戶態(tài),開銷較大
ret = select(connfd 1,&read_fds,NULL,NULL,NULL);
if(ret < 0)
{
printf("Fail to select!n");
return -1;
}

//檢測文件描述符表中相關請求是否可讀
if(FD_ISSET(connfd, &read_fds))
{
ret = recv(connfd,buff,sizeof(buff)-1,0);
printf("receive %d bytes from client: %s n",ret,buff);
}
}

上面的代碼我加了比較詳細的注釋了,大家應該很容易看明白,說白了大概流程其實如下:

首先,創(chuàng)建 socket 套接字,創(chuàng)建完畢后,會獲取到此套接字的文件描述符。

然后,bind 到指定的地址進行監(jiān)聽 listen。這樣,服務端就在特定的端口啟動起來并進行監(jiān)聽了。

之后,利用開啟 accept 方法來監(jiān)聽客戶端的連接請求。一旦有客戶端連接,則將獲取到當前客戶端連接的 connection 文件描述符。

雙方建立連接之后,就可以進行數(shù)據(jù)互傳了。需要注意的是,在循環(huán)開始的時候,務必每次都要重新設置當前 connection 的文件描述符,是因為文件描描述符表在內核中被修改過,如果不重置,將會導致異常的情況。

重新設置文件描述符后,就可以利用 select 函數(shù)從文件描述符表中,來輪詢哪些文件描述符就緒了。

此時系統(tǒng)會將用戶態(tài)的文件描述符表發(fā)送到內核態(tài)進行調整,即將準備就緒的文件描述符進行置位,然后再發(fā)送給用戶態(tài)的應用中來。

用戶通過 FD_ISSET 方法來輪詢文件描述符,如果數(shù)據(jù)可讀,則讀取數(shù)據(jù)即可。

舉個例子,假設此時連接上來了 3 個客戶端,connection 的文件描述符分別為 4,8,12。

那么其 read_fds 文件描述符表(bitmap 結構)的大致結構為 00010001000100000....0。

由于 read_fds 文件描述符的長度為 1024 位,所以最多允許 1024 個連接。

而在 select 的時候,涉及到用戶態(tài)和內核態(tài)的轉換,所以整體轉換方式如下:

所以,綜合起來,select 整體還是比較高效和穩(wěn)定的,但是呈現(xiàn)出來的問題也不少。

這些問題進一步限制了其性能發(fā)揮:

文件描述符表為 bitmap 結構,且有長度為 1024 的限制。

fdset 無法做到重用,每次循環(huán)必須重新創(chuàng)建。

頻繁的用戶態(tài)和內核態(tài)拷貝,性能開銷較大。

需要對文件描述符表進行遍歷,O(n) 的輪詢時間復雜度。

poll 模型

考慮到 select 模型的幾個限制,后來進行了改進,這也就是 poll 模型,既然是 select 模型的改進版,那么肯定有其亮眼的地方,一起來看看吧。

當然,這次我們依舊是先翻閱 linux man 二類文檔,因為這是官方的文檔,對其有著最為精準的定義。

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

其實,從運行機制上說來,poll 所做的功能和 select 是基本上一樣的,都是等待并檢測一組文件描述符就緒,然后在進行后續(xù)的 IO 處理工作。

只不過不同的是,select 中,采用的是 bitmap 結構,長度限定在 1024 位的文件描述符表,而 poll 模型則采用的是 pollfd 結構的數(shù)組 fds。

也正是由于 poll 模型采用了數(shù)組結構,則不會有 1024 長度限制,使其能夠承受更高的并發(fā)。

pollfd 結構內容如下:

struct pollfd {
int fd; /* 文件描述符 */
short events; /* 關心的事件 */
short revents; /* 實際返回的事件 */
};

從上面的結構可以看出,fd 很明顯就是指文件描述符,也就是當客戶端連接上來后,fd 會將生成的文件描述符保存到這里。

而 events 則是指用戶想關注的事件;revents 則是指實際返回的事件,是由系統(tǒng)內核填充并返回,如果當前的 fd 文件描述符有狀態(tài)變化,則 revents 的值就會有相應的變化。

events 事件列表如下:

revents 事件列表如下:

從列表中可以看出,revents 是包含 events 的。接下來結合示例來看一下:

//創(chuàng)建server端套接字,獲取文件描述符
int listenfd = socket(PF_INET,SOCK_STREAM,0);
if(listenfd < 0) return -1;

//綁定服務器
bind(listenfd,(struct sockaddr*)&address,sizeof(address));
//監(jiān)聽服務器
listen(listenfd,5);

struct pollfd pollfds[1];
socklen_t addr_len = sizeof(client);

//接收客戶端連接
int connfd = accept(listenfd,(struct sockaddr*)&client,&addr_len);

//放入fd數(shù)組
pollfds[0].fd = connfd;
pollfds[0].events = POLLIN;

//讀緩沖區(qū)
char buff[1024];

//讀文件操作符
fd_set read_fds;

while(1)
{
memset(buff,0,sizeof(buff));

/**
** SELECT模型專用
** 注意:每次調用select之前都要重新設置文件描述符connfd,因為文件描述符表會在內核中被修改
** FD_ZERO(&read_fds);
** FD_SET(connfd,&read_fds);
** 注意:select會將用戶態(tài)中的文件描述符表放到內核中進行修改,內核修改完畢后再返回給用戶態(tài),開銷較大
** ret = select(connfd 1,&read_fds,NULL,NULL,NULL);
**/

ret = poll(pollfds, 1, 1000);
if(ret < 0)
{
printf("Fail to poll!n");
return -1;
}

/**
** SELECT模型專用
** 檢測文件描述符表中相關請求是否可讀
** if(FD_ISSET(connfd, &read_fds))
** {
** ret = recv(connfd,buff,sizeof(buff)-1,0);
** printf("receive %d bytes from client: %s n",ret,buff);
** }
**/
//檢測文件描述符數(shù)組中相關請求
if(pollfds[0].revents & POLLIN){
pollfds[0].revents = 0;
ret = recv(connfd,buff,sizeof(buff)-1,0);
printf("receive %d bytes from client: %s n",ret,buff);
}
}

由于源碼中,我做了比較詳細的注釋,同時將和 select 模型不一樣的地方都列了出來,這里就不再詳細解釋了。

總體說來,poll 模型比 select 模型要好用一些,去掉了一些限制,但是仍然避免不了如下的問題:

用戶態(tài)和內核態(tài)仍需要頻繁切換,因為 revents 的賦值是在內核態(tài)進行的,然后再推送到用戶態(tài),和 select 類似,整體開銷較大。

仍需要遍歷數(shù)組,時間復雜度為 O(N)。

epoll 模型

如果說 select 模型和 poll 模型是早期的產物,在性能上有諸多不盡人意之處,那么自 Linux 2.6 之后新增的 epoll 模型,則徹底解決了性能問題,一舉使得單機承受百萬并發(fā)的課題變得極為容易。

現(xiàn)在可以這么說,只需要一些簡單的設置更改,然后配合上 epoll 的性能,實現(xiàn)單機百萬并發(fā)輕而易舉。

同時,由于 epoll 整體的優(yōu)化,使得之前的幾個比較耗費性能的問題不再成為羈絆,所以也成為了 Linux 平臺上進行網絡通訊的首選模型。

講解之前,還是 linux man 文檔鎮(zhèn)樓:linux man epoll 4 類文檔 linux man epoll 7 類文檔,倆文檔結合著讀,會對 epoll 有個大概的了解。

和之前提到的 select 和 poll 不同的是,此二者皆屬于系統(tǒng)調用函數(shù),但是 epoll 則不然,他是存在于內核中的數(shù)據(jù)結構。

可以通過 epoll_create,epoll_ctl 及 epoll_wait 三個函數(shù)結合來對此數(shù)據(jù)結構進行操控。

說到 epoll_create 函數(shù),其作用是在內核中創(chuàng)建一個 epoll 數(shù)據(jù)結構實例,然后將返回此實例在系統(tǒng)中的文件描述符。

此 epoll 數(shù)據(jù)結構的組成其實是一個鏈表結構,我們稱之為 interest list,里面會注冊連接上來的 client 的文件描述符。

其簡化工作機制如下:

說道 epoll_ctl 函數(shù),其作用則是對 epoll 實例進行增刪改查操作。有些類似我們常用的 CRUD 操作。

這個函數(shù)操作的對象其實就是 epoll 數(shù)據(jù)結構,當有新的 client 連接上來的時候,他會將此 client 注冊到 epoll 中的 interest list 中,此操作通過附加 EPOLL_CTL_ADD 標記來實現(xiàn)。

當已有的 client 掉線或者主動下線的時候,他會將下線的 client從epoll 的 interest list 中移除,此操作通過附加 EPOLL_CTL_DEL 標記來實現(xiàn)。

當有 client 的文件描述符有變更的時候,他會將 events 中的對應的文件描述符進行更新,此操作通過附加 EPOLL_CTL_MOD 來實現(xiàn)。

當 interest list 中有 client 已經準備好了,可以進行 IO 操作的時候,他會將這些 clients 拿出來,然后放到一個新的 ready list 里面。

其簡化工作機制如下:

說道 epoll_wait 函數(shù),其作用就是掃描 ready list,處理準備就緒的 client IO,其返回結果即為準備好進行 IO 的 client 的個數(shù)。通過遍歷這些準備好的 client,就可以輕松進行 IO 處理了。

上面這三個函數(shù)是 epoll 操作的基本函數(shù),但是,想要徹底理解 epoll,則需要先了解這三塊內容,即:inode,鏈表,紅黑樹。

在 Linux 內核中,針對當前打開的文件,有一個 open file table,里面記錄的是所有打開的文件描述符信息;同時也有一個 inode table,里面則記錄的是底層的文件描述符信息。

這里假如文件描述符 B fork 了文件描述符 A,雖然在 open file table 中,我們看新增了一個文件描述符 B,但是實際上,在 inode table 中,A 和 B 的底層是一模一樣的。

這里,將 inode table 中的內容理解為 Windows 中的文件屬性,會更加貼切和易懂。

這樣存儲的好處就是,無論上層文件描述符怎么變化,由于 epoll 監(jiān)控的數(shù)據(jù)永遠是 inode table 的底層數(shù)據(jù),那么我就可以一直能夠監(jiān)控到文件的各種變化信息,這也是 epoll 高效的基礎。

簡化流程如下:

數(shù)據(jù)存儲這塊解決了,那么針對連接上來的客戶端 socket,該用什么數(shù)據(jù)結構保存進來呢?

這里用到了紅黑樹,由于客戶端 socket 會有頻繁的新增和刪除操作,而紅黑樹這塊時間復雜度僅僅為 O(logN),還是挺高效的。

有人會問為啥不用哈希表呢?當大量的連接頻繁的進行接入或者斷開的時候,擴容或者其他行為將會產生不少的 rehash 操作,而且還要考慮哈希沖突的情況。

雖然查詢速度的確可以達到 o(1),但是 rehash 或者哈希沖突是不可控的,所以基于這些考量,我認為紅黑樹占優(yōu)一些。

客戶端 socket 怎么管理這塊解決了,接下來,當有 socket 有數(shù)據(jù)需要進行讀寫事件處理的時候,系統(tǒng)會將已經就緒的 socket 添加到雙向鏈表中,然后通過 epoll_wait 方法檢測的時候。

其實檢查的就是這個雙向鏈表,由于鏈表中都是就緒的數(shù)據(jù),所以避免了針對整個客戶端 socket 列表進行遍歷的情況,使得整體效率大大提升。

整體的操作流程為:

首先,利用 epoll_create 在內核中創(chuàng)建一個 epoll 對象。其實這個 epoll 對象,就是一個可以存儲客戶端連接的數(shù)據(jù)結構。

然后,客戶端 socket 連接上來,會通過 epoll_ctl 操作將結果添加到 epoll 對象的紅黑樹數(shù)據(jù)結構中。

然后,一旦有 socket 有事件發(fā)生,則會通過回調函數(shù)將其添加到 ready list 雙向鏈表中。

最后,epoll_wait 會遍歷鏈表來處理已經準備好的 socket,然后通過預先設置的水平觸發(fā)或者邊緣觸發(fā)來進行數(shù)據(jù)的感知操作。

從上面的細節(jié)可以看出,由于 epoll 內部監(jiān)控的是底層的文件描述符信息,可以將變更的描述符直接加入到 ready list,無需用戶將所有的描述符再進行傳入。

同時由于 epoll_wait 掃描的是已經就緒的文件描述符,避免了很多無效的遍歷查詢,使得 epoll 的整體性能大大提升,可以說現(xiàn)在只要談論 Linux 平臺的 IO 多路復用,epoll 已經成為了不二之選。

水平觸發(fā)和邊緣觸發(fā)

上面說到了 epoll,主要講解了 client 端怎么連進來,但是并未詳細的講解 epoll_wait 怎么被喚醒的,這里我將來詳細的講解一下。

水平觸發(fā),意即 Level Trigger,邊緣觸發(fā),意即 Edge Trigger,如果單從字面意思上理解,則不太容易,但是如果將硬件設計中的水平沿,上升沿,下降沿的概念引進來,則理解起來就容易多了。

比如我們可以這樣認為:

如果將上圖中的方塊看做是 buffer 的話,那么理解起來則就更加容易了,比如針對水平觸發(fā),buffer 只要是一直有數(shù)據(jù),則一直通知;而邊緣觸發(fā),則 buffer 容量發(fā)生變化的時候,才會通知。

雖然可以這樣簡單的理解,但是實際上,其細節(jié)處理部分,比圖示中展現(xiàn)的更加精細,這里來詳細的說一下。

①邊緣觸發(fā)

針對讀操作,也就是當前 fd 處于 EPOLLIN 模式下,即可讀。此時意味著有新的數(shù)據(jù)到來,接收緩沖區(qū)可讀,以下 buffer 都指接收緩沖區(qū):

buffer 由空變?yōu)榉强眨饧从袛?shù)據(jù)進來的時候,此過程會觸發(fā)通知:

buffer 原本有些數(shù)據(jù),這時候又有新數(shù)據(jù)進來的時候,數(shù)據(jù)變多,此過程會觸發(fā)通知:

buffer 中有數(shù)據(jù),此時用戶對操作的 fd 注冊 EPOLL_CTL_MOD 事件的時候,會觸發(fā)通知:

針對寫操作,也就是當前 fd 處于 EPOLLOUT 模式下,即可寫。此時意味著緩沖區(qū)可以寫了,以下 buffer 都指發(fā)送緩沖區(qū):

buffer 滿了,這時候發(fā)送出去一些數(shù)據(jù),數(shù)據(jù)變少,此過程會觸發(fā)通知:

buffer 原本有些數(shù)據(jù),這時候又發(fā)送出去一些數(shù)據(jù),數(shù)據(jù)變少,此過程會觸發(fā)通知:

這里就是 ET 這種模式觸發(fā)的幾種情形,可以看出,基本上都是圍繞著接收緩沖區(qū)或者發(fā)送緩沖區(qū)的狀態(tài)變化來進行的。

晦澀難懂?不存在的,舉個栗子:

在服務端,我們開啟邊緣觸發(fā)模式,然后將 buffer size 設為 10 個字節(jié),來看看具體的表現(xiàn)形式。

服務端開啟,客戶端連接,發(fā)送單字符 A 到服務端,輸出結果如下:

-->ET Mode: it was triggered once

get 1 bytes of content: A

-->wait to read!

可以看到,由于 buffer 從空到非空,邊緣觸發(fā)通知產生,之后在 epoll_wait 處阻塞,繼續(xù)等待后續(xù)事件。

這里我們變一下,輸入 ABCDEFGHIJKLMNOPQ,可以看到,客戶端發(fā)送的字符長度超過了服務端 buffer size,那么輸出結果將是怎么樣的呢?

-->ET Mode: it was triggered once

get 9 bytes of content: ABCDEFGHI

get 8 bytes of content: JKLMNOPQ

-->wait to read!

可以看到,這次發(fā)送,由于發(fā)送的長度大于 buffer size,所以內容被折成兩段進行接收,由于用了邊緣觸發(fā)方式,buffer 的情況是從空到非空,所以只會產生一次通知。

②水平觸發(fā)

水平觸發(fā)則簡單多了,他包含了邊緣觸發(fā)的所有場景,簡而言之如下:

當接收緩沖區(qū)不為空的時候,有數(shù)據(jù)可讀,則讀事件會一直觸發(fā):

當發(fā)送緩沖區(qū)未滿的時候,可以繼續(xù)寫入數(shù)據(jù),則寫事件一直會觸發(fā):

同樣的,為了使表達更清晰,我們也來舉個栗子,按照上述入輸入方式來進行。

服務端開啟,客戶端連接并發(fā)送單字符 A,可以看到服務端輸出情況如下:

-->LT Mode: it was triggered once!

get 1 bytes of content: A

這個輸出結果,毋庸置疑,由于 buffer 中有數(shù)據(jù),所以水平模式觸發(fā),輸出了結果。

服務端開啟,客戶端連接并發(fā)送 ABCDEFGHIJKLMNOPQ,可以看到服務端輸出情況如下:

-->LT Mode: it was triggered once!

get 9 bytes of content: ABCDEFGHI

-->LT Mode: it was triggered once!

get 8 bytes of content: JKLMNOPQ

從結果中,可以看出,由于 buffer 中數(shù)據(jù)讀取完畢后,還有未讀完的數(shù)據(jù),所以水平模式會一直觸發(fā),這也是為啥這里水平模式被觸發(fā)了兩次的原因。

有了這兩個栗子的比對,不知道聰明的你,get 到二者的區(qū)別了嗎?

在實際開發(fā)過程中,實際上 LT 更易用一些,畢竟系統(tǒng)幫助我們做了大部分校驗通知工作,之前提到的 SELECT 和 POLL,默認采用的也都是這個。

但是需要注意的是,當有成千上萬個客戶端連接上來開始進行數(shù)據(jù)發(fā)送,由于 LT 的特性,內核會頻繁的處理通知操作,導致其相對于 ET 來說,比較的耗費系統(tǒng)資源,所以,隨著客戶端的增多,其性能也就越差。

而邊緣觸發(fā),由于監(jiān)控的是 FD 的狀態(tài)變化,所以整體的系統(tǒng)通知并沒有那么頻繁,高并發(fā)下整體的性能表現(xiàn)也要好很多。

但是由于此模式下,用戶需要積極的處理好每一筆數(shù)據(jù),帶來的維護代價也是相當大的,稍微不注意就有可能出錯。所以使用起來需要非常小心才行。

至于二者如何抉擇,諸位就仁者見仁智者見智吧。

行文到這里,關于 epoll 的講解基本上完畢了,大家從中是不是學到了很多干貨呢?

由于從 Netty 研究到 linux epoll 底層,其難度非常大,可以用曲高和寡來形容,所以在這塊探索的文章是比較少的,很多東西需要自己照著 man 文檔和源碼一點一點地琢磨(linux 源碼詳見 eventpoll.c 等)。

這里我來糾正一下搜索引擎上,說 epoll 高性能是因為利用 mmap 技術實現(xiàn)了用戶態(tài)和內核態(tài)的內存共享,所以性能好。

我前期被這個觀點誤導了好久,后來下來了 Linux 源碼,翻了一下,并沒有在 epoll 中翻到 mmap 的技術點,所以這個觀點是錯誤的。

這些錯誤觀點的文章,國內不少,國外也不少,希望大家能審慎抉擇,避免被錯誤帶偏。

所以,epoll 高性能的根本就是,其高效的文件描述符處理方式加上頗具特性邊的緣觸發(fā)處理模式,以極少的內核態(tài)和用戶態(tài)的切換,實現(xiàn)了真正意義上的高并發(fā)。

手寫 epoll 服務端

實踐是最好的老師,我們現(xiàn)在已經知道了 epoll 之劍怎么嵌入到石頭中的,現(xiàn)在就讓我們不妨嘗試著拔一下看看。

手寫 epoll 服務器,具體細節(jié)如下(非 C 語言 coder,代碼有參考):

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/epoll.h>
#include <pthread.h>
#include <errno.h>
#include <stdbool.h>
#define MAX_EVENT_NUMBER 1024 //事件總數(shù)量
#define BUFFER_SIZE 10 //緩沖區(qū)大小,這里為10個字節(jié)
#define ENABLE_ET 0 //ET模式
/* 文件描述符設為非阻塞狀態(tài)
* 注意:這個設置很重要,否則體現(xiàn)不出高性能
*/
int SetNonblocking(int fd)
{
int old_option = fcntl(fd, F_GETFL);
int new_option = old_option | O_NONBLOCK;
fcntl(fd, F_SETFL, new_option);
return old_option;
}
/* 將文件描述符fd放入到內核中的epoll數(shù)據(jù)結構中并將fd設置為EPOLLIN可讀,同時根據(jù)ET開關來決定使用水平觸發(fā)還是邊緣觸發(fā)模式
* 注意:默認為水平觸發(fā),或上EPOLLET則為邊緣觸發(fā)
*/
void AddFd(int epoll_fd, int fd, bool enable_et)
{
struct epoll_event event; //為當前fd設置事件
event.data.fd = fd; //指向當前fd
event.events = EPOLLIN; //使得fd可讀
if(enable_et)
{
event.events |= EPOLLET; //設置為邊緣觸發(fā)
}
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &event); //將fd添加到內核中的epoll實例中
SetNonblocking(fd); //設為非阻塞模式
}
/* LT水平觸發(fā)
* 注意:水平觸發(fā)簡單易用,性能不高,適合低并發(fā)場合
* 一旦緩沖區(qū)有數(shù)據(jù),則會重復不停的進行通知,直至緩沖區(qū)數(shù)據(jù)讀寫完畢
*/
void lt_process(struct epoll_event* events, int number, int epoll_fd, int listen_fd)
{
char buf[BUFFER_SIZE];
int i;
for(i = 0; i < number; i ) //已經就緒的事件,這些時間可讀或者可寫
{
int sockfd = events[i].data.fd; //獲取描述符
if(sockfd == listen_fd) //如果監(jiān)聽類型的描述符,則代表有新的client接入,則將其添加到內核中的epoll結構中
{
struct sockaddr_in client_address;
socklen_t client_addrlength = sizeof(client_address);
int connfd = accept(listen_fd, (struct sockaddr*)&client_address, &client_addrlength); //創(chuàng)建連接并返回文件描述符(實際進行的三次握手過程)
AddFd(epoll_fd, connfd, false); //添加到epoll結構中并初始化為LT模式
}
else if(events[i].events & EPOLLIN) //如果客戶端有數(shù)據(jù)過來
{
printf("-->LT Mode: it was triggered once!n");
memset(buf, 0, BUFFER_SIZE);
int ret = recv(sockfd, buf, BUFFER_SIZE - 1, 0);
if(ret <= 0) //讀取數(shù)據(jù)完畢后,關閉當前描述符
{
close(sockfd);
continue;
}
printf("get %d bytes of content: %sn", ret, buf);
}
else
{
printf("something unexpected happened!n");
}
}
}
/* ET Work mode features: efficient but potentially dangerous */
/* ET邊緣觸發(fā)
* 注意:邊緣觸發(fā)由于內核不會頻繁通知,所以高效,適合高并發(fā)場合,但是處理不當將會導致嚴重事故
其通知機制和觸發(fā)方式參見之前講解,由于不會重復觸發(fā),所以需要處理好緩沖區(qū)中的數(shù)據(jù),避免臟讀臟寫或者數(shù)據(jù)丟失等
*/
void et_process(struct epoll_event* events, int number, int epoll_fd, int listen_fd)
{
char buf[BUFFER_SIZE];
int i;
for(i = 0; i < number; i )
{
int sockfd = events[i].data.fd;
if(sockfd == listen_fd) //如果有新客戶端請求過來,將其添加到內核中的epoll結構中并默認置為ET模式
{
struct sockaddr_in client_address;
socklen_t client_addrlength = sizeof(client_address);
int connfd = accept(listen_fd, (struct sockaddr*)&client_address, &client_addrlength);
AddFd(epoll_fd, connfd, true);
}
else if(events[i].events & EPOLLIN) //如果客戶端有數(shù)據(jù)過來
{
printf("-->ET Mode: it was triggered oncen");
while(1) //循環(huán)等待
{
memset(buf, 0, BUFFER_SIZE);
int ret = recv(sockfd, buf, BUFFER_SIZE - 1, 0);
if(ret < 0)
{
if(errno == EAGAIN || errno == EWOULDBLOCK) //通過EAGAIN檢測,確認數(shù)據(jù)讀取完畢
{
printf("-->wait to read!n");
break;
}
close(sockfd);
break;
}
else if(ret == 0) //數(shù)據(jù)讀取完畢,關閉描述符
{
close(sockfd);
}
else //數(shù)據(jù)未讀取完畢,繼續(xù)讀取
{
printf("get %d bytes of content: %sn", ret, buf);
}
}
}
else
{
printf("something unexpected happened!n");
}
}
}
int main(int argc, char* argv[])
{
const char* ip = "10.0.76.135";
int port = 9999;

//套接字設置這塊,參見https://www.gta.ufrj.br/ensino/eel878/sockets/sockaddr_inman.html
int ret = -1;
struct sockaddr_in address;
bzero(&address, sizeof(address));
address.sin_family = AF_INET;
inet_pton(AF_INET, ip, &address.sin_addr);
address.sin_port = htons(port);
int listen_fd = socket(PF_INET, SOCK_STREAM, 0); //創(chuàng)建套接字并返回描述符
if(listen_fd < 0)
{
printf("fail to create socket!n");
return -1;
}
ret = bind(listen_fd, (struct sockaddr*)&address, sizeof(address)); //綁定本機
if(ret == -1)
{
printf("fail to bind socket!n");
return -1;
}
ret = listen(listen_fd, 5); //在端口上監(jiān)聽
if(ret == -1)
{
printf("fail to listen socket!n");
return -1;
}
struct epoll_event events[MAX_EVENT_NUMBER];
int epoll_fd = epoll_create(5); //在內核中創(chuàng)建epoll實例,flag為5只是為了分配空間用,實際可以不用帶
if(epoll_fd == -1)
{
printf("fail to create epoll!n");
return -1;
}
AddFd(epoll_fd, listen_fd, true); //添加文件描述符到epoll對象中
while(1)
{
int ret = epoll_wait(epoll_fd, events, MAX_EVENT_NUMBER, -1); //拿出就緒的文件描述符并進行處理
if(ret < 0)
{
printf("epoll failure!n");
break;
}
if(ENABLE_ET) //ET處理方式
{
et_process(events, ret, epoll_fd, listen_fd);
}
else //LT處理方式
{
lt_process(events, ret, epoll_fd, listen_fd);
}
}
close(listen_fd); //退出監(jiān)聽
return 0;
}

詳細的注釋我都已經寫上去了,這就是整個 epoll server 端全部源碼了,僅僅只有 200 行左右,是不是很驚訝。

接下來讓我們來測試下性能,看看能夠達到我們所說的單機百萬并發(fā)嗎?其實悄悄地給你說,Netty 底層的 C 語言實現(xiàn),和這個是差不多的。

單機百萬并發(fā)實戰(zhàn)

在實際測試過程中,由于要實現(xiàn)高并發(fā),那么肯定得使用 ET 模式了。

但是由于這塊內容更多的是 Linux 配置的調整,且前人已經有了具體的文章了,所以這里就不做過多的解釋了。

這里我們主要是利用 VMware 虛擬機一主三從,參數(shù)調優(yōu),來實現(xiàn)百萬并發(fā)。

此塊內容由于比較復雜,先暫時放一放,后續(xù)將會搭建環(huán)境并對此手寫 server 進行壓測。

參考資料:

https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

https://copyconstruct.medium.com/the-method-to-epolls-madness-d9d2d6378642

作者:程序詩人

編輯:陶家龍

出處:cnblogs.com/scy251147/p/14763761.html

巴西也動手了!全球圍剿的中國抽卡,是怎么讓人上癮的?

沒人能拒絕抽卡,沒有人。

不管《陰陽師》、《FGO》、《原神》,還是《和平精英》里的皮膚池子,只要存在抽卡機制的地方,就能看到成批的氪佬、肝帝,扎堆用真金白銀或者時間精力為愛充值,只為了享受特效閃過屏幕時那一兩秒鐘的刺激。

成則歐皇,敗則非酋,為了早日實現(xiàn)脫非入歐,甚至有玄學家鉆研起抽卡的風水、時辰,試圖通過神秘力量讓自己和紙片人老婆/老公們早日團聚。

恭喜你們,已經中了狗策劃的圈套,成為關在籠子里的鴿子。

抽卡不是新鮮玩意兒,早在上世紀80年代,外國友人們就已經摸索出了這套模式的雛形,并輸入到國內,但真正把抽卡騙氪發(fā)揚光大的,還是勤勞勇敢很會玩的中國人民。

最早可以追溯的開箱類游戲消費,是萬智牌、游戲王、精靈寶可夢等實體卡牌,這股風潮在國內引發(fā)了大批量的效仿,伴隨80后、90后們長大的水滸英雄卡,就是其中杰出的本地化案例。

對于許多90后來說,攢幾天零花錢,到小賣部買一包小浣熊干脆面,是童年最刺激的大冒險——伴隨著讓人牙酸的塑料撕扯聲,你可能會看到心心念念的林沖、宋江,也可能一連幾包吃下來,都是手上已經有過的重復卡面。

賭狗的誘因,早在大家還是孩子時就已經種下,沒辦法,賭博是人類的天性。

到千禧年后,個人電腦和網游開始普及,網游大潮由此興起,當時的中國網游弄潮兒史玉柱先生,帶著巨人公司創(chuàng)造出《征途》,世界上第一款使用開箱機制的網絡游戲——玩家可以真金白銀購買“鑰匙”,再用“鑰匙”打開寶箱。

《征途》游戲頁面

為了讓人民幣玩家們體會到尊貴的特權感,開箱的特效十分華麗:散發(fā)光亮的箱子里,突然蹦出個大轉盤,轉盤上標記著五顏六色的裝備和道具,轉到什么,什么就歸你。這套機制為巨人帶來了巨大的流水收益,上線第一季度,就聚攏了14.3110萬活躍付費用戶,平均氪金84元。

朋友們,那可是2006年。

巨人的成功,引發(fā)了世界范圍內的模仿狂潮,不管國內還是國外廠家,都開始在游戲里建立類似的機制。

但這套機制存在風險,法律風險。抽卡開箱的本質,是不公開賠率的博彩游戲,而所有不公開賠率的博彩游戲,都是違法的。

為了規(guī)避風險,后來的模仿者們通過包裝,把賭博嫁接到了一些監(jiān)管不敏感的類型里。畫符、做飯、召喚英靈,抽卡被融進游戲的核心機制,再提供有限的無氪抽卡機會,看似對玩家友善得多。

實際上,讓玩家可以不花錢體驗抽卡,并不是狗策劃們善心大發(fā),不過是這么干,有利于更好地賺錢罷了。

這種給點甜頭養(yǎng)成習慣,再讓玩家沉迷其中越氪越狠的套路,有套成熟的理論依據(jù),斯金納箱。

美國行為主義心理學家斯金納,曾經做過一系列實驗,他把無辜的小白鼠關進箱子里,給箱子裝上按鈕,并設計了四個不同的機制讓小白鼠們按下按鈕。

玩家就是游戲這個箱子里的小白鼠

第一種機制,是純粹的獎勵:只要按下按鈕,就會有食物掉落進箱子中,小白鼠很快掌握了行為和獎勵的對應規(guī)律;

第二種機制,則是懲罰:箱子通了電,小白鼠要停止電擊,就必須按下按鈕,但在這次實驗中,斯金納發(fā)現(xiàn)一旦電擊消失,小白鼠很快就會停止按按鈕的動作,看來,懲罰構建的行為模式并不長久;

第三種機制是固定時間發(fā)放食物,每隔一分鐘按下一次,才會有食物落到小白鼠面前,一開始小白鼠不斷按按鈕,發(fā)現(xiàn)規(guī)律后開始每間隔一分鐘按一次,當食物供給停止后,小白鼠很快停止了行為;

第四種機制,使用了如今抽卡氪金的內涵邏輯,也就是概率式獎勵:小白鼠只要按下按鈕,就會有概率出現(xiàn)食物,按得越多,掉落食物的機會就越高,在這個實驗里,小白鼠對按按鈕這個行為上了癮。

后來斯金納嘗試把小白鼠換成鴿子,再次重復了第四個實驗,效果依然顯著——平均每5分鐘獲得變化時距的食物強化的鴿子,每秒能做出2-3次反應,連續(xù)反應長達15小時。

看來不止人類,只要有腦子的生物,都無法抵擋抽卡的誘惑。

實際上,開箱抽卡的輻射范圍,已經遠遠不只限于游戲的世界。

這幾年火熱的盲盒、福袋等營銷手段,都是斯金納箱理論的變體,而各種限量版,則是吸引小白鼠們不斷做出重復行為的獎勵,在無法預知的概率面前,要獲得這些,唯一的選擇就是做大分母。

但游戲的吸金能力依然遠遠高于上述產業(yè),粘性也更強,畢竟,人在現(xiàn)實里的需求終究有限,但在游戲的世界里,欲望有多大,消耗就能有多大。

比如盲盒,總歸需要收納空間,家里的架子上始終就那么多位置,早晚有放不下的那天,除了極少數(shù)過于有錢能夠買房放娃娃的土豪,大多數(shù)普通人看到架子擺滿,消費欲望終究會有所下降。

開盲盒,年輕人的快樂源泉

但游戲的虛擬儲存空間,很難那么輕易被占滿——除了客觀上游戲倉庫地方夠大,策劃還會不斷通過升星、返魂等機制幫助你清理干凈自己的庫房,在這套消耗巨大的機制里,不管你投入了多少,每次打開圖鑒,會想起來的都是還差哪些卡,而不是氪了多少金。

這些升星、返魂兌換等機制設計,還有一個更重要的作用,通過限制玩家卡面的強度,讓玩家產生相對剝奪感。

拿《陰陽師》舉個例子,當你PVP的時候發(fā)現(xiàn)對面帶著和你一樣的SP妖刀姬,對面一刀直接讓你這邊損失慘重,你的刀卻只能當個吉祥物,不服氣和憋屈立刻油然而生,于是你開始瘋狂氪金肝體力刷魂,竭盡全力讓你的刀像對面的大佬一樣滿級畢業(yè)。

可現(xiàn)實經驗告訴我們,再強的新卡,也只能當一兩個版本的爸爸,等你好不容易把手上的卡都捂熱乎,狗策劃丟出做過數(shù)值調整的新版本,新的大佬們又開始橫行霸道,你要么接著氪金,要么看人裝逼。

簡單來說,看到別人有你沒有的東西,就是相對剝奪感產生的時刻,為了消滅這種不爽的感受,本能會推著你要么往前,要么走人——走了的就是不能轉化為流水的劣質玩家,留下的,都是游戲公司們大發(fā)橫財?shù)娜诵蜛TM機。

在內卷這一點上,就連游戲圈都不能幸免,在號稱“免費也能玩?zhèn)€爽”的《原神》里,每次新卡池開幕,都會在半小時內冒出一大堆把新角色刷到滿破,還配好裝的怪物玩家。要做到這一步,除了有足夠多的錢抽齊重復卡,還需要大把時間刷素材,是真實的又肝又氪。

玩家養(yǎng)卡的速度永遠追不上更新

看到大佬們的隊伍,相對剝奪感洶涌而起的普通玩家們不得不加入戰(zhàn)場,看著一路飛升的流水,策劃們又可以開始去準備下一波更新。

策劃們有恃無恐的基礎是,即使明知道珍稀角色的爆率低下,玩家們依然不會放棄。

心理學上有個理論,叫錨定效應,意思是人在做評估的時候,只會將某些數(shù)值當作起始值。應用在抽卡領域,就是明知道十賭九輸,但只要有一點可能抽到ssr,玩家們的眼里就只會有ssr的影子,全然不顧自己為了抽到這張卡氪了多少金。

換句話說,陷入抽卡漩渦的玩家,思維已經變成了賭徒的形狀,除了不想輸給別人,更重要的是他們也在享受賭博的快感。

有這么良好的消費習慣,難怪國內不管做多垃圾的手游,都一定會把游戲里的博彩系統(tǒng),以及攀比的社交體系做到極致。

送上門的韭菜,誰好意思不割呢?

游戲氪金,根子上算不得一件壞事,游戲公司要賺錢維持運營,玩家需要花錢買快樂,一個愿打一個愿挨。

怎么樣讓玩家出錢,才是問題的關鍵。

比如只提供皮膚和特效池子的《和平精英》,氪不氪導致的結果也就是時髦值差異,對游戲本體的核心體驗幾乎沒有影響:錢多想被當大佬的就去拼命買服裝,只想吃兩把雞就走的就分文不給,各自都能找到各自的樂趣。

穿什么服裝,都不影響吃雞

同理,即使被不斷吐槽逼氪,但《原神》的核心機制和氪不氪關系不大,畢竟PVE才是這款游戲的主要內容,你大可以不花一毛錢體驗到整款游戲的主體內容,只不過難度會比一手強力角色的大佬們難上一點點而已。

可有些游戲公司,在逼玩家出錢這件事情上確實不太做人。

玩家們玩游戲,除了體驗劇情、享受玩法,最核心的爽感來源,其實是獲得心流體驗。心流,又譯作“神馳”,根據(jù)匈牙利裔美國心理學家米哈里?齊克森米哈里的定義,是指一種將個人精神力完全投注在某種活動上的感覺,伴隨心流產生,人們會有高度的興奮及充實感。

這也是為什么,諸如《文明6》、《十字軍之王2》等“時間大殺器”類游戲,許多玩家早就已經集齊全成就,依然愿意投注大把時間精力于其中:他們在享受那種一邊想著“就玩最后一回合”,一邊不知不覺坐到天亮的專注的快樂。

當這種專注被突然打斷,意猶未盡的玩家們的第一反應,會是趕快把它續(xù)上,重新回到順暢的游戲體驗中去。這一點,很容易會淪為策劃們騙氪的軟肋——只需要提高游戲的難度曲線,設置出玩家不氪金就無法逾越的難關就行。

比如國服特供版《植物大戰(zhàn)僵尸》,就是其中翹楚。被EA改造成“三步一氪金”的無恥模式之后,寶開的上海團隊又接手完成了國服特供版,難度曲線比國際服更高,氪金點更多,零氪玩家要通關,簡單來說,難如登天。

策劃吃掉了玩家的腦子

可IP影響力放在那,哪怕口碑全線崩盤,這款游戲的國服營收照樣一度超過《擴散性百萬亞瑟王》,成為海外公司研究如何應對中國游戲市場盜版問題的重要案例。

這部糞作大撈特撈后不久,加州的動視暴雪提交了一份改變世界氪金機制的專利,《在多人游戲中誘導微交易的系統(tǒng)和方法》。這個專利提出用匹配系統(tǒng)刺激消費,系統(tǒng)會把氪金玩家和無氪玩家匹配在一起,讓無氪玩家被肆意暴打,產生巨大的落差,從而購買氪金玩家的同款裝備。

翻譯一下:不花錢?行,那你就別想玩得舒服,給氪佬們當沙包去吧。

2020年6月19日,韓國點名了一批不合規(guī)的概率型游戲,總共19款問題游戲里,有11款來自中國。

實際上,最早鼓搗出網游開箱抽卡機制的中國,也是最早開始實施監(jiān)管的。早在2010年,文化部就出臺過《網絡游戲暫行管理辦法》,要求“不得設置未經網絡游戲用戶同意的強制對戰(zhàn),不得以隨機抽取等偶然方式,誘導網絡游戲用戶采取投入法定貨幣或者網絡游戲虛擬貨幣方式獲取網絡游戲產品和服務”。

上有政策,下有對策,面對幾乎所有手游廠商都把抽卡開箱作為核心收入來源的現(xiàn)狀,監(jiān)管也沒辦法輕易進行一刀切——這一刀下去,中國游戲產業(yè),尤其手游產業(yè)可能直接暴斃。

但這種濫用用戶成癮心理的模式,不只在消耗玩家們對游戲廠商的好感和耐心,也存在和賭博界線模糊的風險。

2021年4月6日,在國家兒童和青少年保護中心協(xié)會(ANCED)的建議下,巴西當局發(fā)起了一項調查,旨在禁止游戲中的開箱行為。據(jù)Esports Observer報道,該協(xié)會認為,這種隨機的盈利機制是一種賭博,在巴西是非法的。

賭博犯法

被調查的公司包括動視、EA、科樂美、任天堂、拳頭、育碧、騰訊、V社等公司。手機游戲發(fā)行商Garena也在其中,據(jù)最新報道,Garena已被要求暫停銷售開箱,直至另行通知。

如果禁令被通過,巴西考慮引入罰款機制,出售開箱的游戲公司一天最高可被罰款70.6萬美元。

在此之前,美國等重要國際游戲市場,也曾出臺過類似全面禁止未成年人接觸抽卡、開箱類游戲的舉措。

而在國內,對于抽卡開箱的保底機制等要求和監(jiān)管也正在逐步完善,依靠抽卡和開箱肆無忌憚壓榨玩家的套路,該剎車了。

免責聲明:本文由用戶上傳,如有侵權請聯(lián)系刪除!