原文地址:http://www.yangguo.info/2014/6/25/10.html
目标
根据指定的key对websocket连接进行负载均衡,达到一致性哈希的效果。
调度模式
Haproxy,负载均衡调度模式有如下几种:
- roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
- static-rr,表示根据权重;
- leastconn,表示最少连接者先处理;
- source,表示根据请求源IP;
- uri,表示根据请求的URI;
- url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name
- hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
- rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
方案及实现
模式:url_param
前端:通过带参的uri,来向server端(Haproxy/Socketserver)发起请求,如:
- ws://localhost/ws?userid=111,来向server端发起请求。
Haproxy:通过acl来配置规则,如:
- acl is_websocket hdr(Upgrade) -i WebSocket
- acl is_websocket hdr_beg(Host) -i ws
反向代理负载均衡配置,如:
- backend socket_backend_url_param
- balance url_param userid
- option forwardfor
- timeout queue 5000
- timeout server 5000
- timeout connect 5000
- server server1 test:8081
- server server2 test:8082
整体配置
global
maxconn 4096 # Total Max Connections. This is dependent on ulimit
nbproc 2
defaults
mode http
frontend all 0.0.0.0:80
timeout client 5000
default_backend www_backend
acl is_websocket hdr(Upgrade) -i WebSocket
acl is_websocket hdr_beg(Host) -i ws
use_backend socket_backend_url_param if is_websocket
backend www_backend
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout server 5000
timeout connect 4000
server server1 test:8081 weight 1 maxconn 1024 check
server server2 test:8082 weight 1 maxconn 1024 check
backend socket_backend_url_param
balance url_param userid
option forwardfor
timeout queue 5000
timeout server 5000
timeout connect 5000
server server1 test:8081
server server2 test:8082
相关推荐
websocket负载均衡V1.21
替代Websocket的解决方案:GoEasy.docx
《深入理解Spring Cloud与微服务构建》学习笔记(十七)~路由网关Spring Cloud Zuul~负载均衡
Web负载均衡
c#源码 Socket 负载均衡 实例 通过本实例可以方便的管理多服务器 大量客户连接管理 可自动按连接数量分配适合的服务器 有助于想要实现这样功能的朋友参考或改写
服务下线时,实现相对容易-只需要同时,哈希环的核心作用体现在负载均衡上。网关做请求转发时,会通过我们重新定义的自定义负载均衡过滤。器,根据业务上需要哈希的分区来实现真实路由器的路由。技术栈Docker(开启...
分布式websocket解决方案源码
Java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统。一个基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统。适用于直播间聊天、游戏内聊天、客服聊天等临时性群聊场景。 ...
WebSocket for Delphi
该资源用C语言实现的简易websocket测试程序,并附有web端的html页面辅助调试,供websocket学习者下载使用,理解websocket协议
主要为大家详细介绍了python实现websocket的客户端压力测试,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这个代码例子使用了c c++实现了websocket 开发 包含了websocket服务器和websocket客户端,拥有详细的解释 这个库比libwebsocket更加简单方便,比libsocket更加高效便捷.
html5的websocket代码示例包括错误解决方案
主要介绍了C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析,包括websocket sharp组件的概念及使用方法,需要的朋友可以参考下
利用开源组件websocket-sharp实现websocket的范例。用于framwork4.5以下版本实现websocket。
本篇博客介绍微信小程序中webSocket的使用方法,以及如何用局部网络建立webSocket连接,进行客户端与服务器之间的对话: webSocket简介 微信小程序端API调用 服务器端使用nodejs配置 演示websocket webSocket...
C# IIS webSocket 实例
qt websocket 客户端代码 简单的websocket的示例代码
websocket长连接,实现实时同步,可借鉴
php使用webSocket实现Echarts长连接自动刷新的解决方案,见:https://blog.csdn.net/weixin_41290949/article/details/109099216