现在碰到了一个棘手的服务器问题,描述如下:服务器采用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分钟没有操作的话,就自动销毁,这样可以防止对象累计越来越多产生内存泄露的情况。
分享到:
相关推荐
在服务器端,我们需要编写代码来构造UDP数据报,包含航班信息,并使用Socket编程接口的sendto方法将其发送到特定的客户端IP地址和端口号。在客户端,我们需要设置一个监听线程,通过Socket编程的recvfrom方法接收...
5. **目录操作**:FTP服务器需要处理客户端的目录变更(`CWD`)、目录列表(`LIST`)等请求。这涉及对操作系统文件系统的调用。 FTP客户端: FTP客户端则是与服务器交互并执行文件操作的程序。C++实现FTP客户端的...
为了显示在线用户,服务器需要维护一个在线用户列表,每当用户登录或登出时更新这个列表,并将变更通知给其他客户端。 在运行此程序之前,需要修改代码中的服务器IP地址和端口号。IP地址通常是服务器的网络地址,而...
在这个简易版中,客户端发起请求,服务器端处理请求并返回结果。 2. **Socket编程**:Java中的Socket是网络通信的基础,它实现了TCP/IP协议。在RPC框架中,Socket用于创建客户端和服务端之间的连接,传输数据。 3....
通过这样的服务端测试,开发者可以检查其客户端代码是否能够适当地与预期的服务器接口进行通信,确保服务端的变更不会破坏客户端的兼容性。 在进行这样的测试时,开发人员会关注以下几个核心知识点: 1. **网络...
4. **Socket编程**:服务端和客户端之间的实时通信通常基于TCP/IP的Socket连接,这要求开发者理解套接字编程原理,并能处理数据的收发。 5. **消息推送机制**:在仿QQ应用中,可能会使用到长轮询、WebSocket或者GCM...
EM2000可能是一个硬件设备、软件系统或者两者结合,而这个服务器端程序是该系统的一部分,负责接收和处理来自客户端的请求。 在描述中,“测试em2000的服务器端程序(用VC实现)zip”进一步确认了这是一个压缩文件...
2. **网络编程**:E语言支持TCP/IP协议,所以冲值服务器可能使用了套接字(Socket)编程来建立客户端和服务器之间的连接,处理请求和响应。这涉及到IP地址、端口号、连接建立、数据传输以及断开连接等知识。 3. **...
- **方案三**: 使用带有GUI界面的客户端,建立Socket连接与B/S架构系统进行通信。 - **方案四**: 使用OCX客户端。在这种模式下,B/S架构系统作为主体,OCX控件内嵌于其中。这种方式提供了较高的自由度,适合进行二次...
综合以上信息,sockit 1.3是一款实用的socket测试工具,对于IT开发者特别是网络编程人员来说,它能帮助他们在TCP和UDP环境中测试和调试服务器和客户端的应用程序。通过模拟实际的网络通信环境,开发者可以验证其代码...
3. **网络通信**:邮件客户端需要通过TCP/IP协议栈与邮件服务器建立连接。开发者需要掌握Socket编程,理解如何创建和管理网络连接,以及如何处理异常和错误。 4. **多线程编程**:为了提高用户体验,邮件客户端可能...
这涉及到TCP/IP协议、Socket编程、数据包的封装与解析,以及网络延迟和连接稳定性等问题。开发者可能使用HTTP或自定义的通信协议来传输游戏状态和用户操作。 3. **多线程与并发处理**:在客户端中,可能需要同时...
然后,服务器端会使用`bind()`函数将套接字与特定的IP地址和端口号关联,并通过`listen()`函数开始等待客户端的连接请求。当有客户端连接时,服务器使用`accept()`函数接收连接请求,生成一个新的套接字用于与客户端...
这需要在服务器端监控每个用户的在线状态,并将状态变更广播给所有其他客户端。这可以通过维护一个全局的用户状态表,当状态变化时,更新表并将消息通过已建立的Socket连接发送到其他客户端。 在`JChatRoom`这个...
开发者需要理解Socket编程,以实现与服务器的稳定通信,同时处理连接建立、数据发送和接收以及断开连接等过程。 3. **多线程**:在高并发环境下,为了保证消息的及时发送和接收,客户端可能采用了多线程技术。这...
2. **网络编程**:作为一款聊天软件,ChatX涉及到网络编程,主要通过Socket编程实现客户端与服务器之间的通信。Socket是TCP/IP协议族的一部分,用于在两个网络节点之间建立连接并交换数据。 3. **多线程**:在ChatX...
2. **WebSocket服务器**:使用WebSocket库(如Java的Jetty,Python的Flask-SocketIO,Node.js的socket.io)创建WebSocket服务器,接收并管理客户端连接。服务器需要维护一个连接池,以便在数据库变化时能找到所有...
这涉及TCP/IP协议栈的理解,包括socket编程,用于创建和管理网络连接。开发者需要掌握如何建立、维护和关闭套接字,以及如何发送和接收数据。 2. **数据包捕获与分析**:wincap是一个Windows平台上的数据包捕获库,...
这个项目旨在实现客户端与服务器之间的通信,通常涉及网络编程、数据交换以及可能的多线程处理。在Java中,这种类型的应用程序设计通常使用Socket编程或者HTTP协议栈,如Apache HttpClient或OkHttp库。 1. **Java ...
此外,如果服务器IP变更,需重新分发公钥,增加了管理工作量。 2. **Expect工具**: Expect是一个用于自动化交互式命令行程序的Tcl扩展。它能够模拟用户输入,对输出进行响应,从而实现自动化执行命令。在需要输入...