1、不说Netty会如何,服务器都有可能直接崩溃掉。
2、按平均每链接传输数据1K,100W链接大概数据量会在1G左右,G级服务器网卡也受不了的。
3、在网络编程中对单机来讲,成功解决了C10K的问题,这种M级别的链接,可能暂时解决不了。
4、对于如此大的并发,一般都是通过负载均衡的方式进行处理,如新浪微博,同时在线100W以上,通过约100多个节点处理,每个节点也就才10000并发左右。
总结如下:
1、JVM需要提前指定堆大小,相比Erlang/C,这可能是个麻烦。
2、GC(垃圾回收),需要持续不断的根据日志、JVM堆栈信息、运行时情况进行JVM参数微调。
3、设置一个最大连接目标,多次测试达到顶峰,然后释放所有连接,反复观察内存占用,获得一个较为合适的系统运行内存值。
4、Eclipse Memory Analyzer结合jmap导出堆栈DUMP文件,分析内存泄漏,还是很方便的。
5、想修改运行时内容,或者称之为热加载,默认不可能。
主要逻辑 :使用netty实现长连接,主要靠心跳来维持服务器端及客户端连接。
主要的实现逻辑如下:
服务器端 :(HeartBeatRespHandler)
1, 服务器在网络空闲 *** 作一定时间后,服务端失败心跳计数器加1。
2, 如果收到客户端的ping心跳包,则清零失败心跳计数器,如果连续n次未收到客户端的ping心跳包,则关闭链路,释放资源,等待客户端重连。
客户端 :(HeartBeatReqHandler)
1, 客户端网络空闲在一定时间内没有进行写 *** 作时,则发送一个ping心跳包。
2, 如果服务器端未在发送下一个心跳包之前回复pong心跳应答包,则失败心跳计数器加1。
3, 如果客户端连续发送n(此处根据具体业务进行定义)次ping心跳包,服务器端均未回复pong心跳应答包,则客户端断开连接,间隔一定时间进行重连 *** 作,直至连接服务器成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)