【发布时间】:2015-07-05 07:13:17
【问题描述】:
我正在构建一个可联网的程序,该程序使用 SFML UDP 库在 2D 屏幕上传输图形更改。
我想在主机服务器上运行接近所有的处理,并且只将图形更新和命令返回值发送给客户端。
我想在数据发送到连接两边的屏幕之前做一个验证条件。我正在考虑将单个字节发送为 0 或 1 来表示成功接收数据并进行同步。
(见图表)
Server-------( updates )----->Client
| |
( wait for )<---( 1 or 0 )-----Send Byte
| |
( if 1 ) ( if byte received )
| |
Screen Screen
在更新屏幕之前来回 ping 以确保数据在两端都得到验证似乎是合乎逻辑的,然后再运行同一事物的另一次迭代(当然是无限期的)。
我的问题是,使用 SFML,发送 1/0 是否有意义,或者它会自行验证,即。发送数据时有返回值吗?
另外,通过网络发送一个字节而不是执行其他操作(例如尝试与时间同步)是否会更慢?是否有更好的方法来使用 FPS 做到这一点?
SFML 方面的答案可能是最好的。
【问题讨论】:
-
Ping 不会告诉服务器任何客户端是否收到更新。我很困惑。
-
对不起,我所说的“ping”是指发送一个字节的数据作为 1 或 0,以表示在一端成功接收数据。
-
"用 FPS 来做这个",你对 FPS 是什么意思?因为您将 FPS 标记为每秒帧数,但您似乎要求的是第一人称射击游戏?你是这个意思吗?
-
图形变化必须是实时的,如 fps(每秒帧数)。我认为标签是相关的。
-
是的,就是这样。这是个问题,“带有 FPS”的部分听起来很奇怪。我会问“考虑到性能,有没有更好的方法来做到这一点?”或最大化 FPS,但 FPS 仍然与网络性能无关,因为两者通常是客户端应用程序的独立职责。
标签: c++ network-programming sfml frame-rate