gpt4 book ai didi

iPhone GameKit 异步服务器模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:57:56 25 4
gpt4 key购买 nike

使用 iOS GameKit 实现服务器应用程序的最佳方式是什么?我应该创建一个单独的服务器线程以某种方式响应所有委托(delegate)事件(接收到的数据等)吗?或者也许使用 NSRunLoops?

最佳答案

除非您知道需要,否则不要使用线程。

默认情况下,几乎所有的东西都使用主线程的运行循环。您不能(轻松地)在不使用另一个线程的情况下使用另一个运行循环——每个线程最多有一个运行循环。

(严格来说,大多数事情都使用“当前”运行循环,这是当前正在执行的线程的运行循环,通常将成为主线程。)

过去,大多数 PC 游戏都不会在不同的线程中运行网络代码,这意味着速度较慢的显卡会降低网络代码的性能。如今,FPS 通常在默认情况下在单独的线程中运行网络代码,或者可以选择这样做(Quake 3 具有“纯服务器”模式);这使得游戏物理与主机的渲染性能分离,这通常是一件好事。

(不知何故,在 Quake 3 中做任何导致纹理/等重新加载的事情仍然滞后于服务器线程。)

如果您要在单独的线程中运行服务器,我建议通过“网络”与本地“客户端”通信。无论如何,您都必须编写某种网络代码,所以只需使用类似 socketpair(AF_UNIX, SOCK_DGRAM, 0, &sockets) 的东西(如果这不起作用,请尝试 AF_INET)并将它们视为UDP 套接字。

请注意,您无需使用 GameKit 即可通过蓝牙进行通信。如果您发布 Bonjour 服务(请参阅 NSNetService),它将自动通过用于 GameKit 的同一蓝牙 PAN 进行广告(在后台,GameKit 在 Bonjour over IP over Bluetooth 上运行)。如果您只使用 Bonjour 和 UDP,则更容易使其跨平台并支持不通过蓝牙运行 GameKit 的旧设备。

(我认为 GameKit 具有额外的网状网络功能,因此 A 和 B 可以使用 C 和中继进行通信。我没有测试过这个。这不是很重要。)

关于iPhone GameKit 异步服务器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com