「GoCN酷Go推荐」使用 cmux 实现服务端连接多路复用

本文介绍了如何使用cmux在同一个TCP端口上实现HTTP和gRPC服务的多路复用。cmux通过扩展net.TCPListener,根据请求内容进行匹配,将请求转发给相应服务。示例展示了简单的配置过程,证明了在同一端口上同时承载两个服务的可行性。cmux对长连接场景的性能影响极小。
摘要由CSDN通过智能技术生成

如果一个应用需要同时对外提供 HTTP 和 gRPC 服务,通常情况下我们会为两个服务绑定不同的监听端口,而本文要介绍的 cmux 为我们提供了一种连接多路复用的新选择,使用 cmux 可以将不同服务绑定在同一个网络端口上!

简介

多路复用是个很常见的概念,我们在编写 HTTP 服务时通常会用 http.ServeMux 或类似的三方工具实现请求与 handler 的匹配和绑定,这类多路复用一般作用在某个服务内部。而 cmux(github.com/soheilhy/cmux) 则提供了基于请求内容对连接进行多路复用的能力,使用 cmux 我们可以在同一个 TCP 监听(端口)上提供包括 gRPC、SSH、HTTPS、HTTP、Go RPC 在内的几乎任何协议。

cmux 通过扩展 net.Listener 的方式实现了连接多路复用能力,在接收到客户端请求后,cmux 会根据注册的规则对客户端请求进行鉴别和匹配,并根据匹配结果将请求转发给相应的服务。

使用举例

cmux 的使用特别简单,我们只需要为每个服务指定相应的匹配规则即可:

package main

import (
 "context"
 "log"
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值