【问题标题】:Most effective way to do networking on Mac/iPhone?在 Mac/iPhone 上进行网络的最有效方法是什么?
【发布时间】:2010-11-24 17:22:21
【问题描述】:

在 Mac 和 iPhone 上建立 TCP 连接或发送 UDP 数据报的最有效方法是什么(即工作量与可读性和可维护性的最佳比率)?我对经典的 BSD 套接字非常熟悉,但我现在的目标不是可移植性;我只是想快速完成一个小项目。

我很想拥有一个 Apple 提供的 Objective-C 包装器,但我想听听人们对人们通常在做什么的一些想法。如果您认为 BSD 套接字是可行的方法,也请随意提出一些想法:我真的只是对找到“正确的方法”感兴趣。

假设协议是自定义协议,因此基于 Cocoa 的 HTTP 客户端类无法满足我们的需求:)


我目前的目标是通过 UDP 在网络上传输设备状态(例如加速度计),同时通过 TCP 保持信令和交付保证事件(例如按下按钮)连接。桌面应用程序会显示此状态。

但是,我目前的申请正是让我提出这个问题的原因;我想知道人们通常会做什么。大约 7 到 8 年前,当我最后一次认真使用 VB6 时,WinSock ActiveX 控件所做的事情与使用 BSD 套接字所做的事情有些不同,无论它在后台做了什么。

【问题讨论】:

    标签: iphone cocoa cocoa-touch macos networking


    【解决方案1】:

    对于网络,简单的答案是,

    (1) ASIHttpRequest ........ 注意 - 这个 QA 已经很老了。不幸的是,ASIHttpRequest 仅具有历史意义,不再可用。

    (2) 异步套接字

    (3) 刚开始时... GameKit(孩子可以使用)

    (4) 只需使用 Bonjour(两行代码)即可找到其他设备。

    “Apple 提供的 Objective-C 包装器”... AsyncSockets(最初由神秘的 Dustin J. Voss 编写)非常好,Apple 不会费心去写一个 em>

    AsyncSockets 正是您所追求的。它在 300,000 个 iFone 应用程序中随处使用。它“是”iFone 上的网络。希望对您有所帮助。

    再次注意 - 这个 QA 已经很老了。您现在可以轻松找到“现代版本”软件,例如 AsyncSockets。

    顺便说一句,仅使用 GK 绝对没有任何问题 - 完全没有问题 - 毫无价值......性能可能非常壮观。唯一的缺点是与 GK 配对需要很长时间。这是为十岁学习编程的孩子创造的幼稚混乱。您将能够直接使用 AsyncSockets 将配对速度提高 100 倍。

    您可能更喜欢使用一些玩具 GK 代码,同时您可以计算 Bonjour 和所有这些。

    我建议大家的共识是,在比 AsyncSocket 更低的级别(即原始套接字)上工作是没有意义的。那里没有更多的性能。

    注意 - 如果您是 gamekit / iOS 新手,请务必阅读此重要提示!
    Client/Server GKSessions

    希望对你有帮助。

    【讨论】:

    • 谢谢!只是一个评论,使用 GameKit 的建议在 OS X 上不是很有帮助 :-) 我最终将 Bonjour 与 BSD 套接字、Apple 的 CFNetwork 和 NSStream 结合使用。
    【解决方案2】:

    您的问题实际上无法详细回答,因为您没有描述您想要做什么。我能给出的最佳答案是阅读MaciOS 的网络介绍指南。

    更新

    我认为 UDP 没有内置任何“简单的 Cocoa 方式”。我记得这个讨论已经在 cocoa-dev 列表中出现过好几次了。 cocoaasyncsocket 项目在很多地方都被提及。它声称:

    AsyncUdpSocket 是一个 UDP/IP 套接字 包装的网络库 CFSocket。它的工作原理几乎完全一样 TCP版本,但设计 专门用于UDP。这包括 排队的非阻塞发送/接收 运营,全面的代表支持, 基于运行循环的自包含类, 并支持 IPv4 和 IPv6。

    【讨论】:

    • 虽然我仍然不认为我当前的应用程序对我的问题非常重要,但我已经用更多信息更新了它。我知道 CFSockets,我知道如何使用 BSD 套接字做事,但我想知道在 Apple 平台上设置连接/数据报流的最佳和最简单的方法是什么。更多的是“最佳实践”问题,而不是“如何做到这一点”问题。
    • 我明白了。我已更新我的答案以包含对 UDP 包装类的引用。
    猜你喜欢
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2010-11-07
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多