多人游戏网络

时间:2017-01-23 13:47:49

标签: java networking tcp udp multiplayer

正在开发的游戏目前正在使用 ServerSocket Socket 来提供多人游戏。当它没有运行localy时,它很多,所以我想知道我是否应该重新制作多人游戏结构以通过TCP( ServerSocket,Socket )和UDP( DatagramSocket )发送。目前正如我所提到的那样,我只使用TCP,并且当没有运行localy时,它每秒只发送大约60个包(30个接收和30个发送)。

服务器和客户端之间发送的信息:
运动,交易,ItemUsage,EnvironmentDetails等等。

所以我的问题是:

如果我使用TCP和UDP而不是仅使用TCP,它会产生巨大的差异吗?

如果我切换到TCP和UDP,我应该在每个协议中发送什么?

提前致谢!

编辑:

客户端:

实例化:this.out = new ObjectOutputStream(new BufferedOutputStream(this.requestSocket.getOutputStream())); this.in = new ObjectInputStream(new BufferedInputStream(this.requestSocket.getInputStream()));

发送:

this.out.writeObject(temp.toString()); this.out.flush(); Temp是 JSONObject

服务器

实例化:this.out = new ObjectOutputStream(new BufferedOutputStream(c.getOutputStream())); this.out.flush(); this.in = new ObjectInputStream(new BufferedInputStream(c.getInputStream()));

发送:this.out.writeObject(temp.toString()); this.out.flush(); Temp是 JSONObject

1 个答案:

答案 0 :(得分:0)

  

如果我使用TCP和UDP而不是仅使用TCP,它会产生巨大的差异吗?

是。如果使用UDP更新游戏的状态,您会注意到更好的性能,因为数据验证不会发生。 UDP数据包被触发然后被遗忘。

此外,要提高性能,请限制要发送的数据量。如果要发送JSON,则每个字符都是一个完整字节。一秒钟30次更新可能过多,因为这是每33.3毫秒更新一次。换句话说,60 Hz监视器每16.7毫秒才会更新一次。

  

如果我切换到TCP和UDP,我应该在每个协议中发送什么?

当您需要确保数据到达服务器或客户端时,通常会使用TCP。当您需要速度时使用UDP,并且可以潜在地处理丢弃的数据包。如果使用UDP,则需要考虑代码中潜在的数据包丢失。