मैंने ऊपर दिए गए उत्तर को सर्टिफिकेट एसएसएल सर्टिफिकेट और कॉर्स एक्सेस-कंट्रोल-अलाउंस हेडर के साथ जोड़ दिया है और यह काम कर रहा है इसलिए मुझे लगा कि मैं परिणाम साझा करूंगा।
Apache httpd.conf फाइल के नीचे जोड़ा गया:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Apache VirtualHost सेटिंग (PHP के लिए doc रूट, Apache और SSL सर्टिफिकेट के साथ है, जबकि नोड .js / socket.io साइट पोर्ट 3000 पर चलती है - और Apache से SSL सर्टिफिकेट का उपयोग करती है) इसके अलावा नोड को देखें। js साइट फ़ोल्डर के लिए प्रॉक्सी का उपयोग करती है / नोडज, सॉकेट.आईओ, और डब्ल्यूएस (वेबस्कैट):
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName www.example.com
ServerAlias www.example.com
DocumentRoot /var/html/www.example.com
ErrorLog /var/html/log/error.log
CustomLog /var/html/log/requests.log combined
SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
RewriteEngine On
RewriteCond %{REQUEST_URI} ^socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /{.*} ws://localhost:3000/$1 [P,L]
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
ProxyPass /nodejs http://localhost:3000/
ProxyPassReverse /nodejs http://localhost:3000/
ProxyPass /socket.io http://localhost:3000/socket.io
ProxyPassReverse /socket.io http://localhost:3000/socket.io
ProxyPass /socket.io ws://localhost:3000/socket.io
ProxyPassReverse /socket.io ws://localhost:3000/socket.io
</VirtualHost>
</IfModule>
फिर मेरे नोड .js ऐप (app.js):
var express = require('express');
var app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Headers", "Content-Type");
res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
next();
});
var http = require('http').Server(app);
var io = require('socket.io')(http);
http.listen({host:'0.0.0.0',port:3000});
मैं एक IP4 श्रोता को मजबूर करता हूं, लेकिन यह वैकल्पिक है - आप स्थानापन्न कर सकते हैं:
http.listen(3000);
नोड.जेएस ऐप (app.js) कोड जारी है:
io.of('/nodejs').on('connection', function(socket) {
//optional settings:
io.set('heartbeat timeout', 3000);
io.set('heartbeat interval', 1000);
//listener for when a user is added
socket.on('add user', function(data) {
socket.join('AnyRoomName');
socket.broadcast.emit('user joined', data);
});
//listener for when a user leaves
socket.on('remove user', function(data) {
socket.leave('AnyRoomName');
socket.broadcast.emit('user left', data);
});
//sample listener for any other function
socket.on('named-event', function(data) {
//code....
socket.broadcast.emit('named-event-broadcast', data);
});
// add more listeners as needed... use different named-events...
});
अंत में, ग्राहक की ओर (नोडजेस के रूप में बनाया गया):
//notice the /nodejs path
var socket = io.connect('https://www.example.com/nodejs');
//listener for user joined
socket.on('user joined', function(data) {
// code... data shows who joined...
});
//listener for user left
socket.on('user left', function(data) {
// code... data shows who left...
});
// sample listener for any function:
socket.on('named-event-broadcast', function(data) {
// this receives the broadcast data (I use json then parse and execute code)
console.log('data1=' + data.data1);
console.log('data2=' + data.data2);
});
// sample send broadcast json data for user joined:
socket.emit('user joined', {
'userid': 'userid-value',
'username':'username-value'
});
// sample send broadcast json data for user left
//(I added the following with an event listener for 'beforeunload'):
// socket.emit('user joined', {
// 'userid': 'userid-value',
// 'username':'username-value'
// });
// sample send broadcast json data for any named-event:
socket.emit('named-event', {
'data1': 'value1',
'data2':'value2'
});
इस उदाहरण में जब JS लोड होता है, तो यह सॉकेट को "नाम-घटना" के रूप में भेज देगा, जो JSON में डेटा को नोड.js / socket.io सर्वर पर भेज देगा।
पथ / नोडज (क्लाइंट द्वारा जुड़ा हुआ) के तहत सर्वर पर आईओ और सॉकेट का उपयोग करना, डेटा को प्राप्त करता है फिर एक प्रसारण के रूप में इसे फिर से भेजता है। सॉकेट में कोई अन्य उपयोगकर्ता अपने श्रोता "नाम-घटना-प्रसारण" के साथ डेटा प्राप्त करेगा। ध्यान दें कि प्रेषक को अपना प्रसारण प्राप्त नहीं होता है।