使用 SFML C++ 库的 UDP 网络中的多个套接字 'handshaking'
Multiple socket 'handshaking' in UDP network using SFML C++ libraries
我正在使用 SFML 库编写一个带有 UDP 协议的实时网络程序。服务器将处理所有处理,将数据包发送到客户端,反之亦然。
我需要一种同步屏幕更新的方法,因为网络的两端都会有一个实时的用户界面。我在想的是,我会让客户端和服务器打开两个端口,一个用于发送数据包,另一个作为一种 'verifying' 端口。
更新并验证完成后,两个循环都将通过网络发送一个字节,表明它们的一方是 'ready'。一旦 'ready' 端收到该字节,它就会知道屏幕已准备好在两侧更新,然后呈现更新。
我的问题是,我如何使用 SFML 库在 C++ 中执行此操作。逻辑是否正确,会不会遇到网络错误等
如果有任何需要清理的地方,请发表评论。
你应该阅读这个主题,看看它是如何工作的,比如 How do the protocols of real time strategy games such as Starcraft and Age of Empires look?
就 SFML 而言,没有什么特别需要知道的,因为该理论适用于所有编程语言(使用套接字)。而且您还没有提供您正在苦苦挣扎的代码,所以没有 Minimal, Complete, and Verifiable example.
我无能为力
但我要说的一件事是永远不要等待网络渲染。这将非常缓慢,如果你想要 "real-time",你必须在没有真实 "real-time" 的情况下模拟它,因为网络总是会有延迟。
如果您使用 UDP,您别无选择,只能打开 2 个端口,一个在服务器上,一个在客户端上。但我会反对使用
"confirmation" 端口,因为这是无用的,因为无论如何你每秒都会发送多次。
参见 how to use sockets with SFML。我想您已经知道这一点,但它可能对来自 google.
的人有用
请参阅 SFML networking rts,它比我更清楚地解释了该怎么做。
来自@muhwu
Generally if you are going for a real-time game with timing critical elements, you should be placing the commands player make slightly to the future to compensate for the latency. This can be few hundred milliseconds at most.
Note also that many articles are just really out of date. TCP for instance is a perfectly good choice for networking in a game like an RTS, especially with lock-step networking, and is even the protocol of choice for many smaller MMOs. Despite this, almost every article around on networking is about building a custom UDP protocol.
说到 gamedev.stackexchange.com,您可能想阅读问题和答案,如果这没有帮助,请在那里提问。
在 SO 上询问 可能不是正确的方法,因为你的问题太宽泛并且已经回答了很多次(比如我链接的第一个)。
我正在使用 SFML 库编写一个带有 UDP 协议的实时网络程序。服务器将处理所有处理,将数据包发送到客户端,反之亦然。
我需要一种同步屏幕更新的方法,因为网络的两端都会有一个实时的用户界面。我在想的是,我会让客户端和服务器打开两个端口,一个用于发送数据包,另一个作为一种 'verifying' 端口。
更新并验证完成后,两个循环都将通过网络发送一个字节,表明它们的一方是 'ready'。一旦 'ready' 端收到该字节,它就会知道屏幕已准备好在两侧更新,然后呈现更新。
我的问题是,我如何使用 SFML 库在 C++ 中执行此操作。逻辑是否正确,会不会遇到网络错误等
如果有任何需要清理的地方,请发表评论。
你应该阅读这个主题,看看它是如何工作的,比如 How do the protocols of real time strategy games such as Starcraft and Age of Empires look?
就 SFML 而言,没有什么特别需要知道的,因为该理论适用于所有编程语言(使用套接字)。而且您还没有提供您正在苦苦挣扎的代码,所以没有 Minimal, Complete, and Verifiable example.
我无能为力但我要说的一件事是永远不要等待网络渲染。这将非常缓慢,如果你想要 "real-time",你必须在没有真实 "real-time" 的情况下模拟它,因为网络总是会有延迟。
如果您使用 UDP,您别无选择,只能打开 2 个端口,一个在服务器上,一个在客户端上。但我会反对使用 "confirmation" 端口,因为这是无用的,因为无论如何你每秒都会发送多次。
参见 how to use sockets with SFML。我想您已经知道这一点,但它可能对来自 google.
的人有用请参阅 SFML networking rts,它比我更清楚地解释了该怎么做。
来自@muhwu
Generally if you are going for a real-time game with timing critical elements, you should be placing the commands player make slightly to the future to compensate for the latency. This can be few hundred milliseconds at most.
Note also that many articles are just really out of date. TCP for instance is a perfectly good choice for networking in a game like an RTS, especially with lock-step networking, and is even the protocol of choice for many smaller MMOs. Despite this, almost every article around on networking is about building a custom UDP protocol.
说到 gamedev.stackexchange.com,您可能想阅读问题和答案,如果这没有帮助,请在那里提问。
在 SO 上询问