《随心记七》SFML中的 “ Building Multiplayer Games ”

本章探讨了游戏编程中的网络分支,讲解了SFML的网络模块和网络游戏编程架构。主要内容包括网络基础、TCP与UDP的区别、在SFML中使用TCP和UDP、非阻塞套接字、数据包交换及构建。介绍了多人游戏中的网络模型,对比了TCP和UDP在游戏开发中的应用,并通过示例展示了如何在SFML中实现简单的client-to-client模拟。
摘要由CSDN通过智能技术生成

目录

Preface

Understanding networking

Networking in games

Transport layer – TCP versus UDP

TCP in SFML

Non-blocking sockets

Exchanging packets

Constructing a packet 

Putting it all into practice

Summary


Preface


●  这就是本书的最后一章。在这里,我们讨论游戏编程的一个全新分支——networking。我们将讨论通过网络在设备之间交换数据。这可能是一个本地网络,也可能是连接太平洋两岸的网络。这在我们希望跨不同机器实现多人游戏体验的游戏中尤其有用。

 

然而,正如在前一章中所提到的,在本章不会对网络编程后的概念深入讲解。本章介绍了SFML的SFML网络模块及其与网络游戏编程常用架构(如客户端到客户端和客户端服务器)的连接。

 

在本章中,我们将介绍以下主题:

  • Understanding networking
  •  The Transport layer—TCP versus UDP
  • TCP with SFML
  •  UDP with SFML
  • Exchanging packets
  •  Putting it all into practice

 


Understanding networking


●   network 的概念已经存在了很长时间,但是如果我们要编写依赖于另一台机器信息的代码,掌握“network 背后的主要概念是很重要的。归根结底,network 就是向不同的机器发送和接收数据。这些数据可以用于多种用途——简单地将其重定向到另一个方向(如路由器)、执行任务并返回结果、更新数据库中的本地内容,等等。

 

从基础上说,如果两个系统希望在彼此之间交换数据,则它们需要位于同一个网络上(或位于相互连接的独立网络上)。这就像将以太网线从一张网卡连接到另一张网卡一样简单,创建一个相当简单的自组网(只在两台机器之间),但仍然能够很好地满足其目的。如果所有的网络都这么简单,机器之间的交互过程就会简单得多,但最终网络不会像今天这样有用。

 

当我们开始引入一些概念时,例如在同一个网络上有两台以上的机器、多个相互连接的网络、机器之间有很长的距离时,我们就开始遇到问题。这些解决方案涉及到巧妙的工程设计,我们不会深入讨论,但是结果是一个结构化的分层网络模型,这使得我们能够避免网络中固有的一些低级问题。这是模型的简化版本:

在本章中,我们将使用 application layer and Transport layer 中工作。当涉及到协议时,我们将处理TCP和UDP以通过网络传输数据。关于这个模型的更多信息可以在这里找到:http://wikipedia.org/wiki/osi-model。这涵盖了网络的基本概念。接下来我们将讨论游戏中的网络以及 比较TCP和UDP,因为它们都在游戏开发中得到了广泛的应用。

 


Networking in games


●  网络 (包括internet)在游戏中有许多用途,从简单的high-score table 到为大型多人在线游戏(MMO)运行服务器。网络最有趣(也可能是最困难)的用途是创建多人游戏。困难之处在于,我们必须在任何给定的时间上,然后在多个屏幕上显示相同的场景。当我们有很多动态对象、事件、玩家进出以及底层网络的质量变化时,这是非常困难的。程序员一直试图通过引入不同的网络设计体系结构来解决这些问题,其中最常见的是: peer-to-peer and client-server architectures(对等和客户机-服务器体系结构).

 

在网络编程的早期, Peer-to-peer被广泛使用。在这个架构中,每个设备与每个其他设备通信,以更新其本地的游戏模拟。下图显示了6个客户端(总共30个)之间的连接:

这在少数客户中很有效,但是当我们让更多的玩家加入时,宽带会成为一个问题(尤其是在慢速网络上,比如internet)。此外,该体系结构在处理同步时会遇到问题。例如,一个client可能在特定时刻检测到两个对象之间的冲突,这在另一个client上不会发生。选择哪一个是正确的并不容易,因为它们都是独立运行的,而且两个模拟在技术上都是有效的。 除此之外,client 很容易cheat ,因为系统中没有权限,他们可以选择性地忽略其他client发送的状态。为了解决这些问题并简化流程,存在另一种网络模型—— client-server.

 

client-server 模型在一个非常简单的基础上运行——一台服务器使用所有逻辑运行模拟,而clients 仅仅使用该模拟来显示其场景。在这个场景中,clients 没有运行任何模拟代码(理想情况下),但是它们从服务器获得每个动态对象的状态(位置、旋转等),并在该状态下显示该对象。设备之间的连接如下图所示:

一旦服务器更新了模拟,每个client 都会收到新的游戏状态,并在本地更新他们的对象。这几乎完全消除了同步问题,因为只有一个设备在运行模拟。对于不需要与其他所有client 通信的client 来说,它的带宽也更加友好。

 

peer-to-peer and client-server 这两个在不同的情况下都是有用的。“ Peer-to-peer ” is suitable for games which are designed to run on LAN or do not update their entities every frame, but only occasionally, as in turn-based games and point-and-clicks.     使用 peer-to-peer 的好处是,它的设置比 client-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值