我有关于创建聊天室的以下问题。消息模型具有creationTimeStamp
属性,在用户从设备发送消息时分配。当另一个用户(或用户收到此消息)时,此时我不会在设备本地接收消息时更改此属性。我在Realm中本地保存的消息。问题是,例如,消息一次发送给第一个用户,但由于Internet连接速度慢,第二个用户已经有时间发送他的消息(或消息),然后第二个用户在他的消息后出现此消息向ChatViewController
发送消息,但当他离开此控制器并返回时,他的消息将显示在最后,而不是第一个用户的消息,因为当我从Realm接收消息时,我按creationTimeStamp对它们进行排序。所以我想学习保存时间戳的最佳做法,对于这种情况。
在设备上收到消息时更改creationTimeStamp
会更好吗?但是如果用户有多个设备,这里也存在问题。虽然我认为这是消息存储在iMessage中的方式,因为它们具有设备之间的同步,所以当快速创建消息时,我会附加相同通信的屏幕保护。
答案 0 :(得分:2)
不幸的是,我没有最好的练习,只有一些想法。
我认为如果不给用户带来不便,您想要实现的目标很难实现。我的意思是,由于互联网连接速度的原因,不同的用户可能对消息的时间安排有不同的观点。您可以在一段时间后使用<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"
xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping">
<entity repository-class="AppBundle\Repository\EventRepository" name="AppBundle\Entity\Event">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="startDate" type="datetime" column="startDate"/>
<field name="endDate" type="datetime" column="endDate"/>
<field name="title" type="string" column="title" length="255"/>
<field name="slug" type="string" column="slug" length="255" unique="true">
<gedmo:slug unique="true" updatable="true" fields="title" separator="-" />
</field>
<field name="description" type="text" column="description" nullable="true"/>
<field name="image" type="string" column="image" length="255" nullable="true"/>
<field name="followers" type="integer" column="followers" nullable="true"/>
<field name="city" type="string" column="city" nullable="false" />
<field name="place" type="string" column="place" nullable="true" />
</entity>
</doctrine-mapping>
来纠正/同步他们的视图以获取消息,但随后屏幕上的消息将被重新排序,这可能很烦人。
我想你可以考虑不同的方法 - 所有用户都拥有相同的时间线视图是否重要?在不久前我们正在实施群聊时,我们同意单个用户可以拥有不同时间线视图的概念。然后我们使用creationTimeStamp
进行排序,因为本地消息recievedTimeStamp
与receivedTimeStamp
相同。它对我们来说非常好,但当然你可以有不同的要求。