涨姿势 – 不一样的服务端长连接方案 – 客户端代理

仔细再看一次腾讯云的小程序解决方案,发现一个新大陆。

传统的 LAMP 架构,PHP-CGI  这种方式是很难处理长连接的。要么写死循环的方式来握住请求,要么使用 swoole 这种,通过 C 拓展来支持。

而 NodeJS 由于官方 DEMO 就是支持跑一个 HTTP 服务,所以处理这些长连接会方便一些(大家好懂一些,我觉得 PHP-CLI 方式也是一样的)。

信道服务

建立连接过程

  1. 小程序请求业务服务器
  2. 业务服务器和信道服务建立连接
  3. 业务服务器告诉小程序你可以和信道服务建立 ws 了
  4. 小程序和信道服务建立 ws
  5. 信道服务请求业务小程序的 ws 建立完成

连接成功后的通信方式

  1. 小程序请求信道服务,信道服务转发请求给业务
  2. 业务请求信道服务,信道服务推送到客户端

我最开始看的时候,没注意信道服务是一个云服务,琢磨着腾讯云的 SDK 难道有什么新的黑魔法来实现 PHP 的长连接。

https://github.com/tencentyun/wafer-php-server-sdk/blob/master/lib/Tunnel/TunnelService.php

看里面的代码,各种 onConnect\onRequest,看着就很像长连接的 API,但他基于 CI 是怎么实现的长连接了?看 composer.json 里面没有用什么黑魔法,搜索代码里面没没看到任何死循环。

客户端代理

为什么信道服务的 icon 是一朵云?

原来腾讯云把这个信道服务抽象成了一个 PaaS 的云服务,这根本就是一个客户端代理。而开源出来的 PHP-SDK,里面没有任何长连接的实现方案。

  • 业务服务器 -> 小程序:业务服务器只需要请求信道服务即可,信道服务接收到业务的请求后,会将 HTTP Body 部分,转成 WS 的消息推送给小程序。
  • 小程序 -> 业务服务器:则正常通过 WS 发送消息给信道服务,信道服务转成 HTTP 请求转发到业务服务器。

对于一些使用 PHP 开发的历史业务,大规模的长连接改造是非常困难,但部署一个长连接转发服务却容易很多(比如用 NodeJS 来写一个)。

腾讯云的这个思路可以帮助各种业务快速支持包括 SSE 和 WS 这两种长连接方案。并且由于业务服务器本身是 HTTP 方式,可以很容易给低版本 IE 做轮训兼容。

最后感谢腾讯云开源了他们的 wafer 方案。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

网络编程之TCP新手误区--心跳的意义

最近面试了很多的学生,发现很多TCP的新手对于TCP的使用有一些误区,而这些坑也是当初我曾经疑惑过得地方。网上很少有文章对这些问题有过详细的解析,即是有也只是直...

17820
来自专栏架构师之路

webim如何保证消息的可靠投递

《webim如何保证消息的可靠投递》 上一章和大家分享了webim消息的实时性问题 消息的可靠性,即消息的不丢失和不重复,也是im系统中的一个难点。当初qq在技...

53380
来自专栏李成熙heyli

webpack使用优化(基本篇)

前言 本文不是webpack入门文章,如果对webpack还不了解,请前往题叶的Webpack入门,或者阮老师的Webpack-Demos。 为什么要使用Web...

278100
来自专栏Laoqi's Linux运维专列

LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义

11530
来自专栏小李刀刀的专栏

前端构建工具 Gulp.js 上手实例

在软件开发中使用自动化构建工具的好处是显而易见的。通过工具自动化运行大量单调乏味、重复性的任务,比如图像压缩、文件合并、代码压缩、单元测试等等,可以为开发者节约...

45770
来自专栏Java Web

Java 面试知识点解析(五)——网络协议篇

30290
来自专栏Danny的专栏

必备的网络常用测试命令(tracert命令)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

2.8K20
来自专栏JetpropelledSnake

Python Web学习笔记之TCP、UDP、ICMP、IGMP的解释和区别

TCP与UDP解释 TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输...

363120
来自专栏程序员与猫

从输入url到页面返回到底发生了什么

1. 前言 Google应该是开发者平日里用得最多的网站之一,今早笔者在浏览器地址栏里键入www.google.com的时候,突然想了解下这背后的网络通信过程究...

23180
来自专栏架构师之路

微信为什么不丢消息?

上一章和大家分享了《http如何像tcp一样实时的收消息?》, 本章来聊一聊即时通讯(Instant Messaging,后简称im)消息的可靠投递。 一、报文...

65680

扫码关注云+社区

领取腾讯云代金券