比如客户有个url,当我们这边状态发生变化时,就给这个url推送信息。客户接收到这个信息,返回success时,我们这边就不推送了,否则连续推送多次,当10次推送不成功时,就不再推送
(类似支付宝充值后的推送机制)
现在的想法是,状态发生变化时,往数据库表(或消息队列)插入数据(包括url,需要推送的参数及推送的时间)。然后写个windows服务去定时(每1分钟)检索这个数据库表的信息,条件为当前时间和推送时间在1分钟并且Flag为失败的信息检索出来。然后根据url去post这个记录,如果成功将这条记录的Flag设置为成功,否则修改推送时间。
感觉就是个生产者消费者模式。有错误的,可以指出。在此非常感谢Rich.T和吴瑞祥。
原理你自己已经讲得很清楚了,这当中有什么问题,你还有什么疑惑?
用什么方式来实现,不太清楚
@无眠: 简单一点定时轮询,复杂一点消息队列
@Rich.T: 有相关的文章推荐?
@Rich.T: 需要消息队列
@无眠: 那直接网上搜索消息队列,资料很多的
@Rich.T: 消息队列如何推送10次(失败的情况),这10次可能推送时间不一样,第一次5秒,下一次30秒,下一次1分钟,再下一次10分钟。。。(时间可以配置)
@无眠: 如果你现在用户量不大,建议你定时轮询就够了,等你对队列有足够的了解再去重写,你现在啥也不了解,问的问题和队列不搭边,让我怎么回答
@Rich.T: 可能没有动手。。哈哈。谢谢
这个要使用WebSocket来实现
如何实现,麻烦说明
@无眠: 额,之前理解错了,我看成客户端了
这个不需要使用WebSocket,请谅解
@刘宏玺: 哈哈,依然感谢
1.接口调用队列(放数据库啊,放消息队列啊都可以)
2.接口循环调用服务.(写一个windows服务,死循环,从调用队列中获取调用消息,包括url和参数)
其实你自己也说清楚了.是卡在没动手做上了
有点道理,哈哈,只是没有动手
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次
}
这是提交,明白的。依然感谢。
如果是桌面应用,可以用remoting 现在也可以用wcf
web应用的话,可以用ajax轮循、websocket,推荐使用SignalR
如果你是.Net开发,推荐使用SignalR。
没有用过,我去找找资料,谢谢推荐