আমি উপরের উত্তরটি সার্টবট এসএসএল সার্ট এবং সিওআরএস অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-শিরোনামগুলির সাথে একত্রিত করেছি এবং এটি কাজ করে চলেছে তাই আমি ভেবেছিলাম ফলাফলগুলি ভাগ করব।
অ্যাপাচি httpd.conf ফাইলের নীচে যুক্ত হয়েছে:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
অ্যাপাচি ভার্চুয়ালহোস্ট সেটিংস (পিএইচপি-র জন্য ডক রুটটি অ্যাপাচি এবং সার্টিবোটের সাথে এসএসএল এর অধীনে রয়েছে, যখন নোড.জেএস / সকেট.ইও সাইটটি 3000 পোর্টে চালিত হয় - এবং অ্যাপাচি থেকে এসএসএল সার্টি ব্যবহার করে) এছাড়াও নোড.জেএস সাইটটি ফোল্ডারের জন্য প্রক্সি ব্যবহার করে দেখুন / নোডেজ, সকেট.আইও, এবং ডাব্লুএস (ওয়েবসকেট):
<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>
তারপরে আমার নোড.জেএস অ্যাপ (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});
আমি একটি আইপ 4 শ্রোতাকে বাধ্য করি, তবে এটি alচ্ছিক - আপনি বিকল্প দিতে পারেন:
http.listen(3000);
node.js অ্যাপ্লিকেশন (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...
});
অবশেষে, ক্লায়েন্ট পক্ষের (nodejs.js হিসাবে তৈরি):
//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'
});
এই উদাহরণে যখন জেএস লোড হয়, তখন এটি সকেটে একটি "নামযুক্ত-ইভেন্ট" উত্সাহিত করবে যা JSON এ ডেটা node.js / socket.io সার্ভারে প্রেরণ করবে।
পাথ / নোডেজ (ক্লায়েন্ট দ্বারা সংযুক্ত) এর অধীনে সার্ভারে io এবং সকেট ব্যবহার করে, ডেটা গ্রহণ করে তারপরে এটি সম্প্রচার হিসাবে পুনরায় বিক্রয় করে। সকেটের অন্য কোনও ব্যবহারকারী তাদের শ্রোতাদের "নামযুক্ত-ইভেন্ট-সম্প্রচার" দিয়ে ডেটা পাবেন। নোট করুন যে প্রেরক তাদের নিজস্ব সম্প্রচার গ্রহণ করবেন না।