首页 新闻 会员 周边 捐助

推送机制如何实现

0
悬赏园豆:60 [已解决问题] 解决于 2016-04-25 11:32

比如客户有个url,当我们这边状态发生变化时,就给这个url推送信息。客户接收到这个信息,返回success时,我们这边就不推送了,否则连续推送多次,当10次推送不成功时,就不再推送
(类似支付宝充值后的推送机制)

问题补充:

现在的想法是,状态发生变化时,往数据库表(或消息队列)插入数据(包括url,需要推送的参数及推送的时间)。然后写个windows服务去定时(每1分钟)检索这个数据库表的信息,条件为当前时间和推送时间在1分钟并且Flag为失败的信息检索出来。然后根据url去post这个记录,如果成功将这条记录的Flag设置为成功,否则修改推送时间。
感觉就是个生产者消费者模式。有错误的,可以指出。在此非常感谢Rich.T和吴瑞祥。

无眠的主页 无眠 | 初学一级 | 园豆:134
提问于:2016-04-22 14:33
< >
分享
最佳答案
0

原理你自己已经讲得很清楚了,这当中有什么问题,你还有什么疑惑?

收获园豆:60
Rich.T | 老鸟四级 |园豆:3440 | 2016-04-22 15:20

用什么方式来实现,不太清楚

无眠 | 园豆:134 (初学一级) | 2016-04-22 15:30

@无眠: 简单一点定时轮询,复杂一点消息队列

Rich.T | 园豆:3440 (老鸟四级) | 2016-04-22 15:32

@Rich.T: 有相关的文章推荐?

无眠 | 园豆:134 (初学一级) | 2016-04-22 15:32

@Rich.T: 需要消息队列

无眠 | 园豆:134 (初学一级) | 2016-04-22 15:33

@无眠: 那直接网上搜索消息队列,资料很多的

Rich.T | 园豆:3440 (老鸟四级) | 2016-04-22 15:33

@Rich.T: 消息队列如何推送10次(失败的情况),这10次可能推送时间不一样,第一次5秒,下一次30秒,下一次1分钟,再下一次10分钟。。。(时间可以配置)

无眠 | 园豆:134 (初学一级) | 2016-04-22 15:44

@无眠: 如果你现在用户量不大,建议你定时轮询就够了,等你对队列有足够的了解再去重写,你现在啥也不了解,问的问题和队列不搭边,让我怎么回答

Rich.T | 园豆:3440 (老鸟四级) | 2016-04-22 15:47

@Rich.T: 可能没有动手。。哈哈。谢谢

无眠 | 园豆:134 (初学一级) | 2016-04-22 15:49
其他回答(5)
0

这个要使用WebSocket来实现

刘宏玺 | 园豆:14020 (专家六级) | 2016-04-22 14:53

如何实现,麻烦说明

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2016-04-22 15:10

@无眠: 额,之前理解错了,我看成客户端了

这个不需要使用WebSocket,请谅解

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-04-22 16:20

@刘宏玺: 哈哈,依然感谢

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2016-04-22 16:21
0

1.接口调用队列(放数据库啊,放消息队列啊都可以)

2.接口循环调用服务.(写一个windows服务,死循环,从调用队列中获取调用消息,包括url和参数)

其实你自己也说清楚了.是卡在没动手做上了

吴瑞祥 | 园豆:29449 (高人七级) | 2016-04-22 15:46

有点道理,哈哈,只是没有动手

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2016-04-22 15:48
0

using (var client = new HttpClient())

client.BaseAddress = new Uri("http://xxx.xxx.xxx.xxx");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var httpContent = new StringContent(string.Empty, Encoding.UTF8);
var response = client.PostAsync("url", httpContent);
var responseString = response.Result.Content.ReadAsStringAsync();

 //...这里分析responseString是否success,返回true或者false,外部根据需要调用N次
}

waiter | 园豆:1000 (小虾三级) | 2016-04-22 15:56

这是提交,明白的。依然感谢。

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2016-04-22 16:06
0

如果是桌面应用,可以用remoting 现在也可以用wcf 

 

web应用的话,可以用ajax轮循、websocket,推荐使用SignalR 

Ropean | 园豆:121 (初学一级) | 2016-04-24 19:40
0

如果你是.Net开发,推荐使用SignalR。

黑 瞳 | 园豆:197 (初学一级) | 2016-04-27 10:23

没有用过,我去找找资料,谢谢推荐

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2016-04-27 10:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册