现在碰到了一个棘手的服务器问题,描述如下:服务器采用netty的tcp协议作为client-server的通讯方式,tcp的好处是与客户端的连接为长连接,消息格式精简,传递比较快速,而且服务器可以发送push消息。但现在的问题是,公司的网络出口ip经常会变更,而tcp是根据ip+port来判断客户端连接的,因此随着ip的变化,该连接肯定失效了。游戏会发生让玩家重新登陆的情况,这样的话,玩家是无法接受的,相当于无缘无故被踢出了游戏。
但是不少公司都是仅有几个出口ip,说明这种情况还是比较多见的,而且像qq等软件,用了tcp或者udp协议,也可以很好的适应这种环境,因此肯定有合适的解决方案。现在想到的一种办法是,每个tcp请求,都带有session信息,可以用一个64位的标志id的字节来存储,这样对协议增加的网络流量是微乎其微的,服务器需要对每个请求sessionId进行处理,判断是否有效,如果有效的话可以直接跟服务器通讯,无效的话需要重新登陆,获取新的sessionId。
另外一个重要问题是,客户端的tcp连接是无法估计保障的,可能玩家会突然关闭浏览器,而不会给服务器发送close信息。如果服务器对每个客户端的连接建立一个对象的话,需要管理这个对象的生命周期,设置一个失效时间,例如30分钟,如果30分钟没有操作的话,就自动销毁,这样可以防止对象累计越来越多产生内存泄露的情况。
分享到:
相关推荐
Socket服务器和客户端,详细说明,手把手教哦。
C#高并发SOCKET服务器和客户端完整工程实例源码,工程现场测试使用的源码,适合新手及有一定经验开发人员
Socket服务器与客户端编程(链表) 这要改变端口号,在任意计算机上进行服务器运用(假想)
最简单的socket服务器跟客户端通信 socket clent socketservice ServerSocket
C# Socket 通信,客户端服务器端, 源码,非常适合初学者
简单的socket 服务器/客户端 编程,入门
C#Socket服务器与客户端交互
基于TCP的Socket编程服务器和客户端代码
socket C# 服务器和客户端 图形界面
自己做的一个socket 多线程服务器,客户端小程序.用来验证一些socket开发方法. 服务器端采用指针数组记录客户端.为每个客户端单开启一个接收发送线程. 功能:服务器转发一个客户端的文本信息到另一个客户端 客户端...
Socket服务器和客户端通信
socket网络编程,实现服务器与客户端的通讯,服务器采用线程进行和客户端的链接。可以实现多客户端和服务器的链接。
android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信android studio Socket客户端服务器通信 TCP/IP通信
简单的socket服务器和客户端互动的小程序,希望大家批评指正,提出宝贵意见
C# Socket服务端向指定的客户端发送消息(包含服务器)
Socket 服务器与客户端,给大家分享下
socket封装库,有服务器和客户端,客户端和服务器集于一体,可以相互发送消息。
SuperSocket写Socket客户端(连接,重连,接收处理数据)