在搭建ssr项目过程中要在本地调试时实现热加载,这就需要把websocket协议进行代理。 查看网上一个开源项目时发现如下代码对ws协议进行代理。
app.on("upgrade", function(req, socket, head) {
proxy.proxy.ws(req, socket, head, {
target: "ws://localhost:8080"
});
});
app是用Koa起的一个http server,因为之前并没有见过类似的方法,所以不知道他是什么时候触发的,为什么要在这个事件对ws进行代理呢?
然后进行调试发现只有在刷新页面时才会触发一次,谷歌一番终于找到一些线索。
原来是http协议提供的一种特殊机制,这一机制允许将一个已建立的连接升级成新的、不相容的协议.
比如把常用的http1.1升级为websocket协议。详细文档查看这里MDN
而node.js也对这个升级机制进行了监听,就是upgrade了,官方文档也有说明
所以上边的代码就是在客户端请求使用websocket协议,而服务器端回复返回101状态码就会触发此事件,此时用koa-proxies对websocket进行代理,ws就能正常通信,热更新就可以使用了。