我正在尝试制作一个 iOS 应用程序,该应用程序将涉及 5 个左右的用户连接到一个 Web 文档,其中一个用户对其进行编辑,而其他用户则实时接收更新。
如何制作应用程序,以便它可以实时更新其文档(用户无需单击“同步”按钮)?它的工作方式应该类似于共享的谷歌文档,当一个用户进行更改时,它会立即反射(reflect)在所有用户的副本中,但它应该在 iOS 上 native 运行,而不是通过网络浏览器。
我并不要求完整的应用程序原理图或任何代码,我只需要朝着正确的方向轻推。
最佳答案
我建议您在服务器上保留文档的主副本(顺便说一句,您将需要一台服务器才能有效地工作),并且当用户编辑文档的临时版本时,本地存储在他们的 iPhone 上,当有更改时,服务器会不断收到更改通知,并且当服务器上的版本发生更改时(如果服务器上的版本与设备上的版本不同),服务器会使用特殊协议(protocol)发送消息,您将指定该协议(protocol)是否
- 内容(文本、图像或其他内容)已添加到文档中
- 内容已从文档中删除
- 文档中的内容已编辑
- ...你明白了
您所需要的只是通过不同的方式来通知设备对服务器文档所做的不同类型的更改。从这些通知中,用户的临时文档可以根据服务器版本的更改进行更改,而无需一遍又一遍地不断下载完整文档。每隔一段时间(或通过手动用户输入),您可以让 iPhone 应用程序请求完整的服务器文档,以确保在 iPhone 上所做的所有更改都是正确的。
使用 NSInputStream
和 NSOutputStream
来接收消息和向服务器发送消息。使用 NSStreamDelegate 来处理服务器事件(它唯一的实例方法是事件处理方法)。 This guide如果您确实对发送消息一无所知,那么这是一个很好的开始。您可以发送和接收 NSData
和 NSString
,您可以在其中存储您的协议(protocol)。
作为协议(protocol)示例,我创建的一个用于从 Windows 服务器接收和发送消息的应用程序执行以下操作:
- 在准备要在 iOS 应用程序上发送的数据时,我首先将 4 个字节的数据写入
NSData
对象,该对象包含后续数据的长度,以便服务器确切知道有多少字节从流中读取。我选择了 4 个字节,因为这是unsigned int
类型的大小,它可以表示非常大的数字(因此数据大小也非常大)。 - 我将数据添加到
NSData
对象中。在我的例子中,数据采用struct
的形式。实际上,您可以发送任何类型的数据,只要您知道如何在另一端解析它。 - 我发送
NSData
对象。
确实,发送、接收和解析 NSStream
消息非常简单,但如果您是第一次为 iOS 应用编写服务器-客户端代码,这个过程可能看起来令人畏惧。我确实简化了这个过程,因为您还必须考虑服务器是否准备好接收消息,是否有可用于写入消息的空间等等,但是我之前链接到的指南也是正确的here ,在我编写客户端-服务器应用程序时非常有帮助。
希望这些指南足够通用(并且针对正确的主题)符合您的喜好。
关于ios - 文档协作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559819/