Col*_*inE 14 websocket node.js socket.io node-http-proxy
我有一个通过socket.io使用websockets的应用程序.对于我的应用程序,我想使用单独的HTTP服务器为我的应用程序提供静态内容和JavaScript.因此,我需要设置一个代理.
我正在使用node-http-proxy.作为起点,我在端口8081上运行我的websockets应用程序.我使用以下代码将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/*', function(req, res) {
console.log("proxying POST request", req.url);
proxy.web(req, res, { target: 'http://localhost:8081'});
});
// Proxy websockets
app.on('upgrade', function (req, socket, head) {
console.log("proxying upgrade request", req.url);
proxy.ws(req, socket, head);
});
// serve static content
app.use('/', express.static(__dirname + "/public"));
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)
上面的应用程序工作正常,但是,我可以看到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
Run Code Online (Sandbox Code Playgroud)
有谁知道如何代理网络套接字通信?所有示例node-http-proxy都假设您要代理所有流量,而不是代理某些流量并服务其他流量.
Dmi*_*try 19
只是偶然发现了你的问题,我发现它仍然没有得到回答.好吧,万一你还在寻找解决方案......你的代码中的问题app.listen(8080)就是语法糖
require('http').createServer(app).listen(8080)
Run Code Online (Sandbox Code Playgroud)
虽然app它本身只是一个处理函数,而不是httpServer的一个实例(我个人认为应该从Express中删除此功能以避免混淆).因此,你app.on('upgrade')实际上从未使用过.你应该写
var server = require('http').createServer(app);
server.on('upgrade', function (req, socket, head) {
proxy.ws(req, socket, head);
});
server.listen(8080);
Run Code Online (Sandbox Code Playgroud)
希望,这有帮助.
| 归档时间: |
|
| 查看次数: |
10680 次 |
| 最近记录: |