仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 959|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA网站制作之利用reuseport和recvmmsg优化UDP服务器仓酷云

[复制链接]
跳转到指定楼层
#
发表于 2015-1-18 11:19:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.比来恰好完成了一个DNS服务器的开辟,因而堆集一点对高功能UDP服务器的开辟履历。假如你也碰到UDP服务器的功能欠安,远不如你的预期,大概你也能够接纳本文的手腕往优化一下尝尝。
udp不像tcp是有毗连的,因而udp不克不及经由过程创建多个毗连来进步对服务器的并发会见,然后我就碰到了在多核情况下经由过程多线程会见一个共享的udpsocket时,不管怎样我都没法将一切的cpu都使用起来,最初的了局固然就是没法压测出呆板的瓶颈,功能也上不往。Google为懂得决他们的DNS服务器功能成绩,就给linux内核打了一个patch,这个patch就是SO_REUSEPORT,经由我的实战体验,reuseport对udp服务器在多核呆板上的功能提拔长短常年夜的,值得利用。
REUSEPORT的目标如其名,就是为了让多线程/多历程服务器的每一个线程都listen统一个端口,而且终极每一个线程具有一个自力的socket,而不是一切线程都会见一个socket。没有reuseport这个patch的话,这么做的成果就是服务器会报出一个相似“地点/端口被占用的”毛病信息。在没有reuseport的时分,客户端发给udp服务器的每一个包都是被送达到独一的一个socket上了,利用reuseport后,服务器有了多个socket,那末客户端发过去的包送达到哪一个socket上呢?linux内核接纳了一个四元组<客户端ip,客户端port,服务器ip,服务器port>的hash来举行包的分发,如许做最少有两个目标:一是包管统一个客户渡过来的包都被递送到统一个socket上;二是在客户端量充足的时分,基础能够平衡到一切的socket上。在利用reuseport的时分必要注重:客户端太少的话,是很难压测出服务器的实在功能的,由于reuseport利用的是hash值来分发哀求到socket上,以是大概呈现每一个socket上吸收包不平衡的情形,利用较多的客户端呆板来压测服务器,目标就是让每一个socket尽量的平衡。
利用reuseport后,udp服务器的并发才能年夜幅度的进步了,这个时分还能够持续利用recvmmsg来持续下降体系挪用的开支。recvmmsg是一个批量接口,它能够从socket里一次读出多个udp数据包,不像recvfrom那样一次只能读一个。假如客户端多、哀求量年夜的话,recvmmsg的批量读就很有上风了。不外,利用recvmmsg必定要分明,它从socket里一次读出的一切包纷歧定是来自统一个客户真个,年夜多半情形应当都是来自分歧客户真个。这不像tcp,从统一个毗连里读到的数据必定是统一个客户端。我们的一个同砚在利用recvmmsg的时分,就犯了这个毛病,误以为一次收取的数据包都是统一个客户真个,最初将一切的应对都发给了统一个客户端,其他的客户端全都超时了。高功能服务器开辟中,体系挪用是高贵的,以是没事就能够用strace看看一个哀求周期内有哪些体系挪用,尽统统大概往优化失落他们。
开辟一个UDP服务器,不是说利用了reuseport和recvmmsg后功能就高了。一个高功能的收集服务器,是必要举行各个方面的优化才行的。

因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
简单生活 该用户已被删除
12#
发表于 2015-3-22 03:10:13 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
柔情似水 该用户已被删除
11#
发表于 2015-3-22 03:10:13 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
飘灵儿 该用户已被删除
10#
发表于 2015-3-15 19:34:59 | 只看该作者
是一种突破用户端机器环境和CPU
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-8 02:08:01 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
再见西城 该用户已被删除
8#
发表于 2015-2-25 20:05:29 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
海妖 该用户已被删除
7#
发表于 2015-2-25 00:53:39 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
只想知道 该用户已被删除
6#
发表于 2015-2-22 16:36:18 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
不帅 该用户已被删除
5#
发表于 2015-2-5 13:00:34 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
蒙在股里 该用户已被删除
地板
发表于 2015-1-28 07:55:24 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
山那边是海 该用户已被删除
板凳
发表于 2015-1-26 20:07:09 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-24 21:05:25 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
若相依 该用户已被删除
楼主
发表于 2015-1-20 20:11:27 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-14 22:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表