首页 » Web前端 » phpsocket反复提交技巧_socket通信中若何避免实时消息和历史消息重复

phpsocket反复提交技巧_socket通信中若何避免实时消息和历史消息重复

访客 2024-12-18 0

扫一扫用手机浏览

文章目录 [+]

个人实现的办理方案有两个

1.socket只推送未度,历史都通过接口拉取,或者直接手事端推送到socket通道里面。

phpsocket反复提交技巧_socket通信中若何避免实时消息和历史消息重复

2.可以在发的时候对每一个天生一个ID,担保唯一性,ID的天生可以借鉴推特的雪花算法,maven直接引用依赖可以实现

phpsocket反复提交技巧_socket通信中若何避免实时消息和历史消息重复
(图片来自网络侵删)

核心算法如下

public Number generateKey() { // 担保当前韶光大于末了韶光。
韶光回退会导致产生重复id long currentMillis = timeService.getCurrentMillis(); Preconditions.checkState(lastTime <= currentMillis, "Clock is moving backwards, last time is %d milliseconds, current time is %d milliseconds", lastTime, currentMillis); // 获取序列号 if (lastTime == currentMillis) { if (0L == (sequence = ++sequence & SEQUENCE_MASK)) { // 当得到序号超过最大值时,归0,并去得到新的韶光 currentMillis = waitUntilNextTime(currentMillis); } } else { // 根据上一次sequence决定本次序列从0还是1开始,担保低并发时奇偶交替 if (lastSequence == 0) { sequence = 1L; } else { sequence = 0L; } } lastSequence = sequence; // 设置末了韶光戳 lastTime = currentMillis; // 天生编号 return ((currentMillis - EPOCH) << TIMESTAMP_LEFT_SHIFT_BITS) | (workerId << WORKER_ID_LEFT_SHIFT_BITS) | sequence;}

相关文章