gpt4 book ai didi

objective-c - 具有多个客户端的 Obj-C 服务器

转载 作者:行者123 更新时间:2023-12-03 16:34:21 26 4
gpt4 key购买 nike

我是一个相当新手的 obj-c 开发人员,对如何建立客户端-服务器关系有疑问。我正在设计(主要是作为一种爱好)一款可以通过互联网与 friend 和家人一起玩的棋盘游戏(想想垄断)。我的问题:如何设置适当的客户端-服务器关系以使一台服务器具有多个客户端?

我的想法是让一台服务器包含游戏状态的所有信息,并通过 Cocoa 优秀的分布式对象框架向各种对象发送适当的消息。但是,我不知道如何让一台服务器接受多个客户端。

firstConnection = [NSConnection defaultConnection];
[firstConnection setRootObject: firstPlayer];
[[NSRunLoop currentRunLoop] run];

但是然后呢?有没有办法在连接客户端时告诉运行循环停止?如果可能的话,我想避免多线程,因为这将是一个全新的复杂学习过程,而且这个项目已经足够具有挑战性了!

任何帮助将不胜感激,如果有必要,我很乐意澄清任何事情。

提前致谢。

最佳答案

基本上采取的策略是让服务器将自身注册为根对象。当客户端连接到服务器时,它会向服务器发送一条连接消息(由您创建的服务器协议(protocol)定义),该消息允许服务器注册该客户端以便将来向其发送消息。这可以像将客户端添加到数组一样简单;不需要特殊的运行循环或线程。

这是一个跨进程通信的快速示例,来 self 第一次学习 DO 时写的一个测试应用程序。设置完成后,您可以添加代码,使服务器根据您想要的任何事件向 _clients 数组中的一个或多个对象发送消息,包括为粗略的游戏循环设置计时器.

服务器:

- (void)registerClient:(byref Client *)client;
{
[_clients addObject:client];
}

- (void)awakeFromNib;
{
_clients = [[NSMutableArray alloc] init];

[[NSConnection defaultConnection] setRootObject:self];

if ( [[NSConnection defaultConnection] registerName:@"server"] == NO )
{
// error code!
}
}

客户:

- (void)awakeFromNib;
{
id theProxy;
theProxy = [[NSConnection rootProxyForConnectionWithRegisteredName:@"server" host:nil] retain];
[theProxy setProtocolForProxy:@protocol(ServerP)];

if ( theProxy == nil )
// error code!

[theProxy registerClient:self];
}

请记住,分布式对象中有很多“陷阱”!从简单的开始,即使这意味着首先开发游戏创意的粗略原型(prototype)。

关于objective-c - 具有多个客户端的 Obj-C 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1879208/

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