用SignalR做了个在线聊天应用,由于多台服务器之间消息推送和通知不能共享。
也就是说用户在A地区的服务器发送一条消息,另一用户在B地区的服务器不能收到消息。
现在就只一台服务器部署,程序运行一段时间后,在线人数上2k,系统运行速度就下降了。
现在怎么解决这个问题,求方案,
另外SignalR需要注意哪些性能问题,由于做这个项目时对SignalR不是很熟,也是边学边卖。
笔者在近期使用signalr开发一个即时Web聊天应用,为了以后打基础,使用Redis做了一个简单的消息队列。但是当signalr服务器进行集群化的时候,由于使用了两个以及以上的集群, 在初步实验的时候,在JS连接客户端的时候出现了一下的客户端报错。由于在一开始的单例服务中, 使用反向代理是完全可行的。所以,排除掉了服务器端编写的错误。之后,笔者在服务器端查看了有关SignalR服务的日志。在对比日志后发现, 在用户的一次连接中, 两个服务端同时生成一个Connection Id 。并在握手失败后,又移除的Connection Id 。
经过对比后,笔者进一步猜想,可能是由于负载均衡的时候将JS客户端的请求分发到多个signalr实例,所以造成了,虽然客户端的连接到服务端,由于消息包接受的并不完整而导致,握手流程的失败。
而后,笔者将Nginx的服务器中的负载均衡方式由默认配置,改为了 ip_hash ,而后一次通过了握手,连接建立成功。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)