【问题标题】:Document Collaboration文档协作
【发布时间】:2012-05-11 23:37:58
【问题描述】:

我正在尝试制作一个 iOS 应用程序,它需要 5 个左右的用户连接到一个 Web 文档,其中一个人编辑它,而其他人则实时接收更新。

如何制作应用程序,以便它可以实时更新其文档(无需用户单击“同步”按钮)?它应该类似于共享的谷歌文档,当一个用户进行更改时,它会立即反映在所有用户的副本中,但它应该在 iOS 上本地运行,而不是通过网络浏览器。

我不是要完整的应用原理图或任何代码,我只需要朝着正确的方向轻推。

【问题讨论】:

    标签: ios real-time collaboration


    【解决方案1】:

    我建议您将文档的主副本保存在您的服务器上(顺便说一下,您需要一台服务器才能有效地进行这项工作),而用户编辑该文档的临时版本本地存储在他们的 iPhone 上,服务器会在有更改时不断收到通知,并且当服务器上的版本更改时(如果服务器上的版本与设备上的版本不同),服务器使用您将指定是否指定的特殊协议发送消息

    1. 内容(文本、图像或其他内容)已添加到文档中
    2. 内容已从文档中删除
    3. 文档中的内容已编辑
    4. ...你明白了

    您只需要不同的方式来通知设备对服务器文档所做的不同类型的更改。从这些通知中,用户的临时文档可以根据对服务器版本所做的更改进行更改,而无需一遍又一遍地不断下载完整文档。每隔一段时间(或通过手动用户输入),您可以让 iPhone 应用程序请求完整的服务器文档,以确保在 iPhone 上所做的所有更改都是正确的。

    使用NSInputStreams 和NSOutputStreams 接收和发送消息到您的服务器。使用NSStreamDelegate 处理服务器事件(它唯一的实例方法是事件处理方法)。如果您真的对发送消息一无所知,This guide 是一个很好的开始。您可以发送和接收NSDataNSStrings,您可以在其中存储您的协议。

    作为协议的一个示例,我创建的一个应用程序可以接收和发送来自 Windows 服务器的消息,它执行以下操作:

    1. 在准备要在 iOS 应用程序上发送的数据时,我首先将 4 个字节的数据写入包含正在进行的数据长度的 NSData 对象,以便服务器确切知道要从流中读取多少字节.我选择了 4 个字节,因为这是 unsigned int 类型的大小,它可以表示非常大的数字(因此也可以表示非常大的数据大小)。
    2. 我将数据添加到NSData 对象。就我而言,数据采用struct 的形式。实际上,只要您知道如何在另一端解析数据,您就可以发送任何类型的数据。
    3. 我发送NSData 对象。

    确实,发送、接收和解析NSStream 消息非常简单,但如果您是第一次为 iOS 应用程序编写服务器-客户端代码,则该过程似乎令人生畏。我确实将过程简化了很多,因为您还必须考虑服务器是否准备好接收消息,是否有空间可用于写入消息等等,但是我之前链接到的指南也是正确的here,在我编写客户端-服务器应用程序时非常有帮助。

    希望这些指南足够笼统(并且针对正确的主题),以满足您的喜好。

    【讨论】:

    • 我已经知道了大部分。对我来说棘手的部分是弄清楚“特殊协议”是什么。我的问题是我不知道如何将消息从我的服务器发送到我的 iPad/iPhone。
    • 使用NSInputStreams 和NSOutputStreams 与您的服务器接收和发送消息。使用NSStreamDelegate 处理服务器事件(它唯一的实例方法是事件处理方法)。如果您真的对发送消息一无所知,This guide 是一个很好的开始。您可以发送和接收NSDataNSStrings,您可以在其中存储您的协议。如果您需要有关协议的帮助,我也可以将其添加到我的答案中。
    • 请添加。这似乎正是我所需要的。我唯一的问题是:我的服务器是 windows 还是 UNIX 有关系吗?
    • 您从服务器发送的数据很可能以您的应用可以轻松解析的方式进行编码。我有一个从 Windows 服务器接收数据的应用程序,我遇到的唯一问题是 endianness,但实际上可以通过创建包含从服务器发送的数据类型的 structs 来解决这个问题,因为它们属于与简单数据类型不同的字节序。例如,如果您的应用程序发送一个int,您应该收到一个struct,其中只包含一个int。我不知道为什么会这样。
    • 所以,在 iPad 端,我使用 Streams。我是否也在 Windows 服务器端使用流?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2016-04-22
    • 2010-10-07
    • 2023-03-21
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    相关资源
    最近更新 更多