博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs 转发websocket (websocket proxy)
阅读量:6953 次
发布时间:2019-06-27

本文共 1544 字,大约阅读时间需要 5 分钟。

const http = require('http')const server = http.createServer((req, res) =>{  res.end('hello world');}).listen(8080)  server.on('upgrade', (req, client, head) => {    const headers = _getProxyHeader(req.headers) //将客户端的websocket头和一些信息转发到真正的处理服务器上    headers.hostname = 'localhost'//目标服务器    headers.path = '/' 目标路径     headers.port = 6443    const proxy = http.request(headers) //https可用https,headers中加入rejectUnauthorized=false忽略证书验证    proxy.on('upgrade', (res, socket, head) => {      client.write(_formatProxyResponse(res))//使用目标服务器头信息响应客户端      client.pipe(socket)      socket.pipe(client)    })    proxy.on('error', (error) => {      client.write("Sorry, cant't connect to this container ")      return    })    proxy.end()    function _getProxyHeader(headers) {      const keys = Object.getOwnPropertyNames(headers)      const proxyHeader = { headers: {} }      keys.forEach(key => {        if (key.indexOf('sec') >= 0 || key === 'upgrade' || key === 'connection') {          proxyHeader.headers[key] = headers[key]          return        }        proxyHeader[key] = headers[key]      })      return proxyHeader    }    function _formatProxyResponse(res) {      const headers = res.headers      const keys = Object.getOwnPropertyNames(headers)      let switchLine = '\r\n';      let response = [`HTTP/${res.httpVersion} ${res.statusCode} ${res.statusMessage}${switchLine}`]      keys.forEach(key => {        response.push(`${key}: ${headers[key]}${switchLine}`)      })      response.push(switchLine)      return response.join('')    }  })

 

转载地址:http://ylvil.baihongyu.com/

你可能感兴趣的文章
ora-01033:oracle initialization or shutdown in progre
查看>>
exec 动态脚本 里面的参数和sp_executesql (注意引号,否则容易异常)
查看>>
旅行商问题【山财新生赛E】
查看>>
php curl host 设置访问指定主机
查看>>
Vysor安装
查看>>
oracle密码过期
查看>>
android 学习笔记(八)building system8.4 android源码目录结构(下)
查看>>
第20章 keras中“开箱即用”CNNs
查看>>
swiper 仿淘宝详情页面 视频图片切换
查看>>
动一动手指,玩转 Kindle Paperwhite 2 (2015.7.13)
查看>>
Eclipse中将java类打成jar包形式运行
查看>>
是否需要有代码规范
查看>>
.NET跨平台实践:用C#开发Linux守护进程
查看>>
大数据量分页优化
查看>>
MongoDB 可视化管理工具 MongoCola-1.0.4发布
查看>>
office2007安装时,提示找不到Office.zh-cn下的OfficeMUI.msi解决方法
查看>>
Vue 组件之间传值
查看>>
jtable 的简单使用
查看>>
XED中文亂碼
查看>>
浏览器json数据格式化
查看>>