Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 使用节点http-proxy来代理websocket连接大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个通过socket.io使用websockets的应用程序.对于我的应用程序,我想使用单独的http服务器为我的应用程序提供静态内容JavaScript.所以我需要把一个代理.

我正在使用node-http-proxy.作为起点,我的websockets应用程序在端口8081上运行.我正在使用以下代码将socket.io通信重新定向到这台独立服务器,而使用express服务于静态内容

var http = require('http'),httpProxy = require('http-proxy'),express = require('express');

// create a server
var app = express();
var proxy = httpProxy.createProxyServer({ ws: true });

// proxy http GET / POST
app.get('/socket.io/*',function(req,res) {
  console.log("proxying GET request",req.url);
  proxy.web(req,res,{ target: 'http://localhost:8081'});
});
app.post('/socket.io/*',res) {
  console.log("proxying POST request",{ target: 'http://localhost:8081'});
});

// Proxy websockets
app.on('upgrade',function (req,socket,head) {
  console.log("proxying upgrade request",req.url);
  proxy.ws(req,head);
});

// serve static content
app.use('/',express.static(__dirname + "/public"));

app.listen(8080);

上面的应用程序工作正常,但是,我可以看到,socket.io不再使用websockets,而是回到XHR轮询.

我可以通过查看代理代码中的日志来确认:

proxying GET request /socket.io/1/?t=1391781619101
proxying GET request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=13917816294
proxying POST request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=1391781629
proxying GET request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=13917816294
proxying GET request /socket.io/1/xhr-polling/f-VVzPcV-7_IKJJtl6VN?t=13917816294

有谁知道如何代理Web套接字通信?来自node-http-proxy的所有示例都假设您要代理所有流量,而不是代理一些服务并为其他服务提供服务.

解决方法

只是绊倒了你的问题,我看到它仍然没有回答.那么,如果你还在寻找解决方案…
你的代码中的问题是app.listen(8080)只是语法糖

require('http').createServer(app).listen(8080)

而应用程序本身只是一个处理函数,而不是httpServer的一个实例(我个人认为这个功能应该从Express中@L_@R_262_11241@_17@以避免混淆).
因此,您的app.on(‘升级’)实际上从未使用过.你应该改

var server = require('http').createServer(app);
server.on('upgrade',head) {
  proxy.ws(req,head);
});
server.listen(8080);

希望,那有帮助.

大佬总结

以上是大佬教程为你收集整理的node.js – 使用节点http-proxy来代理websocket连接全部内容,希望文章能够帮你解决node.js – 使用节点http-proxy来代理websocket连接所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。