问题描述
VisualStudio2010IDEc#服务端程序Oracle10g32bit个推推送android客户端实时监测数据库中的一个表,要求变化就推送到C#程序中,C#程序收到返回值后用个推推送到android客户端。如何实现?
解决方案
本帖最后由 seansmith0426 于 2016-06-22 17:16:49 编辑
解决方案二:
程序轮询检测吧
解决方案三:
简单地随便说一下吧。这方面我并希望有太多的人能够动手去搞开发,但是希望有较多的热你能够识别那些骗人的东西。首先,有些完全不懂编程开发的人,对我说过许多遍“xxxx公司有个手机推送接口,问我们的即时通讯系统要不要买人家的平台账号”。且不管这些公司的平台生存期有多长、平台质量如何,单说最基本的事情,“推送”跟我们的即时通讯的push消息推送是两码事。手机接收到推送的消息是直接被那些流氓程序置顶到手机的待机界面、或者首界面顶部,它们还可能通过偷看你的手机的进程从而与之“通讯”。但是这种推送通常都有较大延迟,例如有些产品延时4个小时也算是正常,而且到达率可能只有80%不到。而我们任何人要做一个即时通讯系统,或者随便一个什么与自己公司的业务服务器联网的软件,那都需要基本是99.999999%成功率,而且在几百毫秒内推送到全世界各地的手机app。我们随便做一个tcp双向通讯程序就能做到且很简单做到的事情,其实其特点跟那些商业公司所说的“推送”完全是两码事儿!再说所谓的“监视数据库”。数据库有巨大的、海量的log信息,如洪水一般。你不可能想当然地去知道“监视”什么数据记录,否则就你直接把数据库系统给搞死了。即使是SQLServer支持.net以SqlCacheDependency方式感知数据修改,也是在页面级别的,而且可能有1秒钟延迟。更何况稍微“人性胡为”一点就会让数据库服务器被垃圾操作阻塞得价值下降100倍?!这方面从数据库出发来考虑问题,看似简单,实际上就相当于超市没有保安、没有感应报警器,完全是招小偷去的节奏。实际上任性地搞这方面的东西,就是拿用户练手。小用户觉得挺爽,等服务量刚刚成长为同行业领先水平的几十分之一,这样的系统就垮了,这样的软件创业公司或者app就倒闭了。(然后这帮开发人员又到别的公司去坑了)真正的推送要从业务系统出发。例如当一个大V上线时,可能他的5万个粉丝中凡是app在线的用户(不管登录到系统的哪一个区级接入服务器上)都会在app运行中收到一条提醒信息。这个功能安排的出发点,在于从这个业务出发。这里的精确性安排,可以让系统性能的损耗降(相比那些不太注重精细安排的设计方法)到千分之一以下。绝不是滥用数据库。滥用数据库的那种设计者,就好像是满大街贴性病小广告的那些人,因为不知道贴在哪里才最对地方,所以滥用浆糊。
解决方案四:
你所谓的“个推”,可以这样看,相当于在服务器端有每一个手机的“进程映射”,如果有1万手机那么数据库端就有1万个坑爹的额外进程在轮询它。其实在你只有几十个手机客户端时,这可以骗人。一些小的博客网站,平常并发客户端在线数量奇少,可以这样偏偏投资人。然后这样的产品,死的很快。
解决方案五:
android使用极光推送,net使用signalr
解决方案六:
引用1楼cuitang1031的回复:
程序轮询检测吧
我要做成变化就推得那种,轮询定时间间隔会有延迟,时间间隔定小了太耗费服务器资源了。
解决方案七:
引用2楼sp1234的回复:
简单地随便说一下吧。这方面我并希望有太多的人能够动手去搞开发,但是希望有较多的热你能够识别那些骗人的东西。首先,有些完全不懂编程开发的人,对我说过许多遍“xxxx公司有个手机推送接口,问我们的即时通讯系统要不要买人家的平台账号”。且不管这些公司的平台生存期有多长、平台质量如何,单说最基本的事情,“推送”跟我们的即时通讯的push消息推送是两码事。手机接收到推送的消息是直接被那些流氓程序置顶到手机的待机界面、或者首界面顶部,它们还可能通过偷看你的手机的进程从而与之“通讯”。但是这种推送通常都有较大延迟,例如有些产品延时4个小时也算是正常,而且到达率可能只有80%不到。而我们任何人要做一个即时通讯系统,或者随便一个什么与自己公司的业务服务器联网的软件,那都需要基本是99.999999%成功率,而且在几百毫秒内推送到全世界各地的手机app。我们随便做一个tcp双向通讯程序就能做到且很简单做到的事情,其实其特点跟那些商业公司所说的“推送”完全是两码事儿!再说所谓的“监视数据库”。数据库有巨大的、海量的log信息,如洪水一般。你不可能想当然地去知道“监视”什么数据记录,否则就你直接把数据库系统给搞死了。即使是SQLServer支持.net以SqlCacheDependency方式感知数据修改,也是在页面级别的,而且可能有1秒钟延迟。更何况稍微“人性胡为”一点就会让数据库服务器被垃圾操作阻塞得价值下降100倍?!这方面从数据库出发来考虑问题,看似简单,实际上就相当于超市没有保安、没有感应报警器,完全是招小偷去的节奏。实际上任性地搞这方面的东西,就是拿用户练手。小用户觉得挺爽,等服务量刚刚成长为同行业领先水平的几十分之一,这样的系统就垮了,这样的软件创业公司或者app就倒闭了。(然后这帮开发人员又到别的公司去坑了)真正的推送要从业务系统出发。例如当一个大V上线时,可能他的5万个粉丝中凡是app在线的用户(不管登录到系统的哪一个区级接入服务器上)都会在app运行中收到一条提醒信息。这个功能安排的出发点,在于从这个业务出发。这里的精确性安排,可以让系统性能的损耗降(相比那些不太注重精细安排的设计方法)到千分之一以下。绝不是滥用数据库。滥用数据库的那种设计者,就好像是满大街贴性病小广告的那些人,因为不知道贴在哪里才最对地方,所以滥用浆糊。
说的好,我刚接触这个,理解确实浅。
解决方案八:
引用3楼sp1234的回复:
你所谓的“个推”,可以这样看,相当于在服务器端有每一个手机的“进程映射”,如果有1万手机那么数据库端就有1万个坑爹的额外进程在轮询它。其实在你只有几十个手机客户端时,这可以骗人。一些小的博客网站,平常并发客户端在线数量奇少,可以这样偏偏投资人。然后这样的产品,死的很快。
我不是这个意思。我这是独立出来App的一个程序,并不是嵌套进App的。所以只有一个进程在访问。我得意思是,数据发生变化,推给我得程序,然后我的程序调用个推方法,个推推送再推给APP。
解决方案九:
如果你的数据量不是很大,可以用这种方式。在数据库建立消息表,数据有变化时,将推送内容写入消息表。C#写个独立线程,死循环每秒查询一次消息表,如果消息表有记录,就读取消息内容,利用个推发送,发送完成后删除消息表的记录。
解决方案十:
引用5楼seansmith0426的回复:
Quote: 引用1楼cuitang1031的回复:
程序轮询检测吧我要做成变化就推得那种,轮询定时间间隔会有延迟,时间间隔定小了太耗费服务器资源了。
请教个小学问题:你三年级期末考试,交卷回家了。老师负责批改然后出成绩。问:你怎样可以第一时间知道你的期末成绩?要求:要立即、马上、不能间隔1分钟,老师出成绩你就要一分钟内马上知道。参考答案:1.你每隔半分钟就打电话问一次老师。2.让老师出成绩后半分钟内打电话通知你。
解决方案十一:
全校小学生都想立即、马上,一分钟内知道成绩,又该怎么办?如果这2个问题有答案了,那楼主的问题也有答案了~
解决方案十二:
引用3楼sp1234的回复:
你所谓的“个推”,可以这样看,相当于在服务器端有每一个手机的“进程映射”,如果有1万手机那么数据库端就有1万个坑爹的额外进程在轮询它。其实在你只有几十个手机客户端时,这可以骗人。一些小的博客网站,平常并发客户端在线数量奇少,可以这样偏偏投资人。然后这样的产品,死的很快。
你怎么知道楼主是要做产品呢?我看楼主的意思是做一个DBA的工具啊——只要特定的表有修改就通知相关人员吧
解决方案十三:
正常用户不会管数据库的东西吧