websocket经过F5无法发送到服务端

这个项目做到要上线了,真是累。在这个关头,又冒出了一个新问题。我们做的是在线客服的产品,客户端页面中会使用websocket与服务端实时通讯,起先我们在nginx上做了转发规则,一切正常。到了生产,网络层面就没有那么简单了,又是双卡绑定,又是F5负载,网络一直是我的软肋。

长话短说,js中创建ws的上下文是这样的 ws://cc.com/wsp/ws/websocket,cc.com是F5 ip的域名,在本机hosts中定义(如172.21.83.89   cc.com) 。new了这个ws后,可以在服务端看到触发了onOpen(),说明ws通道建立成功。但是客户端发送消息时,即调用ws.send(),服务器却一直没有收到。

不是通道已经建立了吗,怎么发不过来?客户说F5的配置没有问题,想了应该也是,如果有问题,怎么连接建立得了。各种检查没发现。只能去服务器抓包了。

下机房,插屏显,敲指令,不亦忙乎。linux下抓包用的是tcpdump,抓2个host之间可以用

tcpdump ip host 172.21.22.23 and 172.21.22.24   -w   /tmp/pack.cap

-w是写,/tmp/pack.cap是具体路径,要保存为cap格式,可以在wireshark中看。反复抓了很多包,包括发一条消息,5条、10条、30条,竟然抓到的包数量都差不多。(注意了抓包时,浏览器不要打开控制台,否则会把所有js,css等会抓到不利分析)。这说明什么,说明包都没有到达机器啊。那只能是在F5没有转发过来。生产机的F5不能动,只有去测试机上搞了。

我们在测试环境的F5做了相同的配置,包括虚拟服务列表和池。发现发送消息时,F5的过包数也是不会变化,说明F5没有转发。为什么不转。看看80端口的配置

when HTTP_REQUEST{

if {[HTTP::uri] contains "/wsp/" } {

  pool wsp_172.21.83.89

}else{

 pool wsp_172.21.83.89

}

}

这是使用iRule写的,基于事件驱动。主要包含以下几个大类型的事件

Global Events

HTTP Events

SSL Events

Authentication Events

HTTP Events里有HTTP_REQUEST--》系统完全解析整个客户机请求标头时触发。此处所说的标头是指方法、URI、版本和所有标头,不包括请求正文。

生产使用了HTTP_REQUEST,如果HTTP请求的uri包含/wsp/,那丢到wsp_的池子里。没问题,所有的/wsp/的http都可以过。我们猜没过匹配到规则,当在最后面写了else,也没有匹配到,意思是很有可能匹配不到/wsp/的uri了,标头没有uri吗?

简单来说就是建立ws时,是拿着ws://cc.com/wsp/ws/websocket的uri到F5的,这个匹配得到并且成功建立通道。但是,后续发送的消息,报文中应该是不含上下文的标头了,没有uri,就没法匹配。

为了验证猜测,websocket不走F5 80端口,在虚拟服务列表里新建一个90端口,uri也要改成ws://cc.com:90/wsp/ws/websocket,只要不走上面配置,消息就能正确地发送到服务端。

这些问题平时真是很难知道。网上也很少有资料。因为使用F5来做websocket转发的并不多。

找时间要复习一下七层协议,四层协议,三层协议。真的





  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值