111,120
社区成员
发帖
与我相关
我的任务
分享
跟楼主说一下我做的时候大致的思路。
一开始我也想着,服务端已经有一个web项目部署在IIS上了,那么只需要这个web项目可以随时的监听到相关端口,保持和客户端的通讯就行了,这个简单,我在web页面上做一个按钮,类似于开始监听这种,点击按钮,通过web api接口打开相应业务功能,开始监听客户端连接,然后服务端收到的消息后处理客户端连接的消息,再通过signalR来主动地把服务端消息推送到web页面,来完成实时的消息更新。
后来我发现web项目的服务端去做一些比较"主动"的事情的时候总是吃力的,因为IIS总是用来响应客户端的请求,http连接总是连接完毕后就释放了,它是无状态的你无法通过web api来确认一个客户端是否在线,除非你有在客户端做定时发送心跳这种处理。再然后,比如我的Web项目有api更新,需要我重新发布内容的时候,我的监听功能也会被迫关闭,发布完成后需要重新打开。并且通过服务端主动地向web页面推送消息这么看起来也不是特别的“服务端”,总是觉得很别扭,特别是当你推送的内容需要跟前台登录地权限挂钩时,这些东西设计起来就变得有一些复杂。
后来我就另外起了一个控制台应用,将所有主动的事情都放在了这个控制台里进行,控制台应用一直开着,端口就一直保持监听的状态,这就非常的"主动"了,控制台应用接收到的所有的数据,该存数据库存数据库,如果web网页需要频繁查询的一些数据,包括一些消息推送的队列,我选择存在了redis里。包括你希望的在网页端通过点击一个按钮向各个客户端发送消息,通过redis的订阅和发布功能,你都可以办到。
那么web端网页消息的实时更新我也不再选择使用signalR去主动推送,由前端自己定义定时器来轮询向服务器发送请求。最后完成的效果还可以。
这样的话负责处理客户端连接和消息处理的是控制台程序,web后台仅仅作为查询和展示。
最后,将这个控制台程序注册为windows服务设置开机自动启动,就可以了。
最后我本人是个新手,以上仅供参考。