我开发了一个javascript chat (后端上的php),使用:
1) long-polling to get new messages for the receiver
2) sessionStorage to store the counter of messages
3) setInterval to read new messages and if sessionStorageCounter < setIntervalCounter then the last message is shown to receiver.
4) javascript to create,update and write the chat dialogues该模块工作正常,但是当用户进行快速聊天时,接收方的前端会收到两到三条相同的消息(计数器没有失败,查询也没有提供双重插入)。
代码似乎是正确的(这就是我没有提供代码的原因),所以间隔延迟可能是原因(在减少间隔延迟时,没有任何变化)。
您认为上面的模式是错误的实践吗?您认为哪种模式可以消除错误?
发布于 2015-04-30 02:38:09
如果我自己解决这个问题(而不是使用一个已经处理这个问题的现有库),我的方法是:
如果重新轮询确实导致副本从服务器传递到客户端,则在每个消息中存在唯一的If使得消除它们变得微不足道。将服务器端消息队列视为事件流,每个客户端跟踪其最后读取的位置。客户端不会猜测消息的适当顺序,有多少条消息,等等,因为它的状态完全由‘我看到了什么’组成,几乎没有机会失去同步。
发布于 2015-05-04 17:19:56
因为它是实时聊天,所以setInterval间隔可能很小,可以同时向服务器请求两三次新消息。确保服务器处理程序是同步的,并且它忽略了来自同一个用户的重复查询。
https://stackoverflow.com/questions/29820912
复制相似问题