पर प्रॉक्सी websockets मैंने पोर्ट 80 पर चल रहे node.js में http प्रॉक्सी लिखा है। मुझे 8080 पर पोर्ट 9 0 9 0 और अपाचे में मानक http यातायात को रीडायरेक्ट करना है। यह है मेरा प्रॉक्सी कोड:node.js: अन्य पोर्ट
httpProxy = require('http-proxy');
httpProxy.createServer(function (req, res, proxy) {
if (req.url.match(/socket.io/)) {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 9090
});
} else {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 8080
});
}
}).listen(80);
सब कुछ काम करता है, लेकिन io.socket xhr-polling पर वापस आ जाता है।
http://localhost/client.htm - falls back to xhr-polling
file:///C:/.../client9090.htm - still uses websocket
socket.io एप्लिकेशन पोर्ट 9090 पर चल रहा है, client.htm 80 को जोड़ता है और client9090.htm 9090.
यह एक नोड-http-प्रॉक्सी की तरह लग रहा करने के लिए सीधे जोड़ता है socket.io एप्लिकेशन बनाता है एक्सएचआर-मतदान मोड में काम करने के लिए। ग्राहक क्रोम v.25 है
socket.io एप्लिकेशन कोड
var io = require('socket.io').listen(9090);
io.on('connection', function (socket) {
socket.on('hi!', function (data) {
console.log(data);
socket.emit('news');
});
socket.on('ahoj', function (data) {
console.log(data);
});
});
client.htm कोड
<script src="http://localhost/socket.io/socket.io.js"></script>
<script>
var chat = io.connect('http://localhost')
chat.on('connect', function() {
chat.emit('hi!');
});
chat.on('news', function() {
chat.emit('ahoj',{a:1,b:2});
});
</script>
client9090.htm एक ही है, लेकिन स्थानीय होस्ट स्थानीय होस्ट ने ले ली है: 9090
जैसा कि मैंने कहा था, हर कोई अच्छी तरह से काम करता है, केवल समस्या यह है कि नोड-http-प्रॉक्सी websockets से xhr-polling में वापस आती है। क्या कोई मदद कर सकता है?
httpProxy = require('http-proxy');
// added `var server =` here
var server = httpProxy.createServer(function (req, res, proxy) {
if (req.url.match(/socket.io/)) {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 9090
});
} else {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 8080
});
}
}).listen(80);
// added upgrade listener section here:
server.on('upgrade', function (req, socket, head) {
server.proxy.proxyWebSocketRequest(req, socket, head);
});
हालांकि, उपयोग आप ऊपर वर्णित के लिए: