netty框架做游戏服务器怎么样?
如果你指的是单机的话,不说Netty会怎么样,服务器都有可能直接崩溃掉,你的算一下,按平均每链接传输数据1K,100W链接大概数据量会在1G左右,G级服务器网卡也受不了的,我们在网络编程中对单机来讲,成功解决了C10K的问题,这种M级别的链接,可能暂时解决不了。对于如此大的并发,一般我们都是通过负载均衡的进行处理,如新浪微博,同时在线100W以上,通过约100多个节点处理,每个节点也就才10000并发左右。
交互游戏是怎么实现的?
(一)需要使用客户端与服务端建立长链接的进行通讯,目前使用Netty通讯,实现长链接。Netty自己开发一个server,根据入参数返回一个json字符串。
写好这个server需要了解:
(1)TCP协议:三次握手、四次挥手、tcp如何保证包的可靠性传输(ack,seq,超时重传),流量控制(滑动窗口,拥堵控制)等
(2)IO通信的几种,阻塞IO,非阻塞IO,多路复用IO,信号量IO通信,异步IO。目前tomcat支持阻塞IO,多路复用IO,Netty编程都支持,看程序员自己的实现
(3)非阻塞IO原始API比较复杂,后来出现REACTOR的NIO,目前Netty可以支持这种开发
(二)算法,paceman的算法就是最优路径,一般可以使用图的深度优先遍历算法
ghost使用动态规划的算法,计算下一步
(三)环境,可以使用docker进行打镜像使环境统一部署
长连接的实质是什么?用什么协议比较好?如何优化?
不管长短连接都是tcp层面的,而线程则是处理逻辑层面的事情,没有一一对应的关系。单线程通过io多路复用,比如epoll,select,iocp也可以同时维护几万个长连接。
首先说下,短连接是指的每次客户端有请求就和服务器建立一个tcp连接,服务器端处理完本次请求就立即关闭连接。短连接适合业务请求小且不频繁的逻辑,比如timeserver等,好处就是编程简单,服务器资源也不会被一批客户一直占用。
Tcp建立连接和释放连接都是需要时间以及资源消耗的,对于有些业务,比如游戏,客户端和服务器之间频繁的通信,如果每次都是临时建立请求,就非常浪费服务器资源且体验不好。所以就需要长连接,但是长连接带来的问题就是逻辑复杂。前后端都需要维护连接的状态,本身tcp底层是会维护心跳的,但是这个心跳频率是不确定的。为了实时掌握连接情况,大多数情况,业务层会自己写一套心跳逻辑,同时会维护一个session会话状态层。