delphi + redis 实现即时消息

按客户的要求,开了软件自动升级功能,每次上传完升级包都要给客户那边的负责人发微信说一声。

有时人家搁会议室一待就是一上午,基本联系不上,想了下,反正搁会议室也是讨论这个软件,

干脆给开个提醒升级的功能就完了。

结合redis的pub/sub机制,加上无所不能的Delphi, 最终达到目的。

知道redis牛,但实际没咋用过,只是一知半解。刚好借机学习下。

下载安装包,https://github.com/MicrosoftArchive/redis/releases

一路next,安装完,中间有个默认添加到环境变量PATH中的勾,默认没勾,为了少出幺蛾子,也给打上了。

默认端口6379,查了下,这也算个彩蛋,原来大牛们玩梗都能玩的这么高级 ^_^

 

敲完了代码,本以为能一次性通过,结果报TCP连接失败。

跟客户的网管哥们确认端口是开放了的,赶紧查了下资料,说是外网(非redis服务器本机)要建立连接,得改一下配置文件里的参数。

默认路径安装的话,配置文件搁这:

并且有俩,这是碰上的第一个坑,也就是上边安装时改了默认端口,用了哥们给开的指定的端口,

坑1: 只改了redis.windows.conf中的port, 重启了数次redis服务,就是不起效,

后来打开redis服务的属性一瞅,原来默认走的是下边那个配置文件

赶紧改完

结果还是不行,服务器本机没啥问题,自己的电脑就是连不了,再问度娘,填上坑2

坑2, 把这个bind注释掉就完了

继续坑3,因为用的是客户的云服务器,按资料上说的,为了安全,主要也是为了练手敲一下命令行,设置了密码:

结果中间因为其他原因重启redis服务,发现白瞎了。

还得是找度娘帮忙,大佬们的知乎给了解答,简单概括就是:通过命令行设置是临时的,要永久改还是得去改配置文件

自此,这算是实现了本次的目标。

To-Do:

1. 弹窗的按钮再扩展下,显示个头像啥的,体验能更好点;

2. 订阅消息的消息体再扩展下,因为A、B、C虽然都订阅了同一个频道,但是解析时一瞅这是人家A发给B的情书,C也就别厚着脸皮偷看了。

不知道这个思路合适不,但是既然说redis的I/O那么牛,再说目前这个内部用的软件的用户量目前就百十号人。这个应该算最皮毛的吧。

可行的话,这不就实现了软件内的通讯?想想挺美,之前用 TIdUDPServer 实现过类似功能,但是总觉复杂了点,不爽。

-----------------------------------------------------------------------------

继续坑4:后续实际使用过程中,客户反馈软件运行一段时间后,收不到消息。跟进发现是Socket连接断开。报错:

Socket Error # 10053.Software caused connection abort. 之类的。

看了篇介绍redis配置文件的公众号文章,发现了个参数,默认值是0,按说明设置为60,就可以了。

-----------------------------------------------------------------------------

按自己的思路,目前软件的(1)升级提醒、(2)内部通讯、(3)登录登出提醒及在线、离线列表、(4)在B客户端登录后自动把已在登录在A客户端的相同账号踢掉(强制下线),这些基本的功能都实现了一遍。目前看,客户那边实际的用户50+人,日常用着也没出啥问题。咋简单咋整吧。

posted on 2021-12-15 00:09  Mozzie2020  阅读(1183)  评论(0编辑  收藏  举报

导航