webman/push
webman/push একটি নিখরচায় পুশ সার্ভার প্লাগিন, ক্লায়েন্ট সাবস্ক্রিপশন মডেলের উপর ভিত্তি করে তৈরি, যা pusher এর সাথে সামঞ্জস্যপূর্ণ, এবং এর অনেক ক্লায়েন্ট রয়েছে যেমন JS, অ্যান্ড্রয়েড(java), IOS(swift), IOS(Obj-C), uniapp, .NET, Unity, Flutter, AngularJS ইত্যাদি। ব্যাকএন্ড পুশ SDK সমর্থন করে PHP, Node, Ruby, Asp, Java, Python, Go, Swift ইত্যাদি। ক্লায়েন্টগুলি স্বয়ংক্রিয়ভাবে হার্টবিট এবং সংযোগ বিচ্ছিন্ন হলে পুনঃসংযোগ করে, ব্যবহার করা খুব সহজ এবং স্থিতিশীল। এটি বার্তা পুশ, চ্যাট এবং অন্যান্য অনেক তাত্ক্ষণিক যোগাযোগ পরিস্থিতির জন্য উপযুক্ত।
প্লাগিনে একটি ওয়েবপেজ js ক্লায়েন্ট push.js এবং uniapp ক্লায়েন্ট uniapp-push.js অন্তর্ভুক্ত রয়েছে, অন্য ভাষার ক্লায়েন্ট গুলি https://pusher.com/docs/channels/channels_libraries/libraries/ থেকে ডাউনলোড করা যাবে।
ইনস্টলেশন
composer require webman/push
ক্লায়েন্ট (জাভাস্ক্রিপ্ট)
জাভাস্ক্রিপ্ট ক্লায়েন্ট অন্তর্ভুক্ত করুন
<script src="/plugin/webman/push/push.js"> </script>
ক্লায়েন্ট ব্যবহার (পাবলিক চ্যানেল)
// সংযোগ তৈরি করুন
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket ঠিকানা
app_key: '<app_key, config/plugin/webman/push/app.php থেকে প্রাপ্ত>',
auth: '/plugin/webman/push/auth' // সাবস্ক্রিপশন অথেন্টিকেশন (শুধুমাত্র প্রাইভেট চ্যানেলের জন্য)
});
// ধরুন ব্যবহারকারীর uid 1
var uid = 1;
// ব্রাউজার user-1 চ্যানেলের বার্তাগুলি শোনে, অর্থাৎ ব্যবহারকারী uid 1 এর বার্তা
var user_channel = connection.subscribe('user-' + uid);
// যখন user-1 চ্যানেলে message ইভেন্টের বার্তা আসে
user_channel.on('message', function(data) {
// data তে বার্তার বিষয়বস্তু আছে
console.log(data);
});
// যখন user-1 চ্যানেলে friendApply ইভেন্টের বার্তা আসে
user_channel.on('friendApply', function (data) {
// data তে বন্ধু আবেদন সম্পর্কিত তথ্য আছে
console.log(data);
});
// ধরুন গ্রুপ আইডি 2
var group_id = 2;
// ব্রাউজার group-2 চ্যানেলের বার্তাগুলি শোনে, অর্থাৎ গ্রুপ 2 এর গ্রুপ বার্তা শোনে
var group_channel = connection.subscribe('group-' + group_id);
// যখন গ্রুপ 2 তে message বার্তা ইভেন্টটি ঘটে
group_channel.on('message', function(data) {
// data তে বার্তার বিষয়বস্তু আছে
console.log(data);
});
টিপস
উপরের উদাহরণে subscribe ফাংশন চ্যানেল সাবস্ক্রাইব করে,messagefriendApplyচ্যানেলের ইভেন্ট। চ্যানেল এবং ইভেন্ট যেকোনো স্ট্রিং হতে পারে, সার্ভার সাইডে পূর্বনির্ধারিত কনফিগারেশনের প্রয়োজন নেই।
সার্ভার পুশ (PHP)
use Webman\Push\Api;
$api = new Api(
// webman এর অধীনে config ব্যবহার করে কনফিগারেশন পাওয়া যায়, non-webman পরিবেশে সঠিক কনফিগারেশন ম্যানুয়ালি লিখতে হবে
'http://127.0.0.1:3232',
config('plugin.webman.push.app.app_key'),
config('plugin.webman.push.app.app_secret')
);
// user-1 এর জন্য সমস্ত ক্লায়েন্টকে message ইভেন্টের বার্তা পাঠান
$api->trigger('user-1', 'message', [
'from_uid' => 2,
'content' => 'হ্যালো, এটি বার্তার বিষয়বস্তু'
]);
প্রাইভেট চ্যানেল
উপরের উদাহরণে যেকোনো ব্যবহারকারী Push.js এর মাধ্যমে তথ্য সাবস্ক্রাইব করতে পারে, যদি তথ্য সংবেদনশীল হয় তবে এটি নিরাপদ নয়।
webman/push প্রাইভেট চ্যানেল সাবস্ক্রিপশন সমর্থন করে, প্রাইভেট চ্যানেলগুলি private- দিয়ে শুরু হয়। যেমন
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket ঠিকানা
app_key: '<app_key>',
auth: '/plugin/webman/push/auth' // সাবস্ক্রিপশন অথেন্টিকেশন (শুধুমাত্র প্রাইভেট চ্যানেলের জন্য)
});
// ধরুন ব্যবহারকারীর uid 1
var uid = 1;
// ব্রাউজার private-user-1 প্রাইভেট চ্যানেলের বার্তাগুলি শোনে
var user_channel = connection.subscribe('private-user-' + uid);
যখন ক্লায়েন্ট প্রাইভেট চ্যানেল সাবস্ক্রাইব করে (private- দিয়ে শুরু হওয়া চ্যানেল), ব্রাউজার একটি ajax অথেন্টিকেশন অনুরোধ পাঠায় (ajax ঠিকানা new Push এর auth প্যারামিটারের কনফিগারেশন ঠিকানা), ডেভেলপার এখানে নির্ধারণ করতে পারে যে, বর্তমান ব্যবহারকারী এই চ্যানেলটি শোনার অনুমতি আছে কিনা। এভাবে সাবস্ক্রিপশনের নিরাপত্তা নিশ্চিত করা হয়।
অথেন্টিকেশন সম্পর্কে আরও জানতে
config/plugin/webman/push/route.phpএর কোড দেখুন
ক্লায়েন্ট পুশ
উপরের সমস্ত উদাহরণ ক্লায়েন্ট একটি চ্যানেল সাবস্ক্রাইব করছে, সার্ভার API ইন্টারফেসকে পুশ করছে। webman/push ক্লায়েন্ট সরাসরি বার্তা পুশ করাও সমর্থন করে।
টিপস
ক্লায়েন্টদের মধ্যে পুশ শুধুমাত্র প্রাইভেট চ্যানেল (private-দিয়ে শুরু হওয়া চ্যানেল) সমর্থন করে, এবং ক্লায়েন্ট শুধুমাত্রclient-দিয়ে শুরু হওয়া ইভেন্টগুলি ট্রিগার করতে পারে।
ক্লায়েন্ট ইভেন্ট পুশ ট্রিগারের উদাহরণ
var user_channel = connection.subscribe('private-user-1');
user_channel.on('client-message', function (data) {
//
});
user_channel.trigger('client-message', {form_uid:2, content:"হ্যালো"});
টিপস
উপরের কোডটি所有(বর্তমান ক্লায়েন্ট বাদে)private-user-1সাবস্ক্রাইব করা সমস্ত ক্লায়েন্টকেclient-messageইভেন্টের তথ্য পুশ করে (পুশ করা ক্লায়েন্ট নিজে তার পুশ করা তথ্য পাবে না)।
ওয়েবহুক
ওয়েবহুক চ্যানেলের কিছু ইভেন্ট গ্রহণ করতে ব্যবহৃত হয়।
বর্তমানে প্রধানত ২টি ইভেন্ট রয়েছে:
-
1、channel_added
যখন একটি চ্যানেল কোনও ক্লায়েন্টের অনলাইনে থাকে না তখন এটি অনলাইনে আসলে একটি ঘটনাকে ট্রিগার করে, অথবা বলা যেতে পারে অনলাইন ইভেন্ট। -
2、channel_removed
যখন একটি চ্যানেলের সমস্ত ক্লায়েন্ট অফলাইনে চলে যায় তখন এটি ট্রিগার হয়, অথবা বলা যেতে পারে অফলাইন ইভেন্ট।
টিপস
এই ইভেন্টগুলি ব্যবহারকারীর অনলাইন স্টেট বজায় রাখতে খুবই সহায়ক।টিপস
webhook ঠিকানাconfig/plugin/webman/push/app.phpএ কনফিগার করা হয়।
ওয়েবহুক ইভেন্ট প্রক্রিয়াকরণের কোডconfig/plugin/webman/push/route.phpএর লজিকে রেফারেন্স করুন।
পেজ রিফ্রেশ করা হলে ব্যবহারকারী সংক্ষেপে অফলাইনে চলে যাওয়া অফলাইন হিসাবে গণ্য হওয়া উচিত নয়, webman/push দেরিতে নির্ধারণ করবে, তাই অনলাইন/অফলাইন ইভেন্টগুলির মধ্যে 1-3 সেকেন্ডের বিলম্ব হবে।
wss প্রোক্সি (SSL)
https এর অধীনে ws সংযোগ করা যাবে না, wss সংযোগ ব্যবহার করতে হবে। এই ক্ষেত্রে nginx দিয়ে wss প্রোক্সি ব্যবহার করতে পারেন, কনফিগারেশন নিম্নরূপে হবে:
server {
# .... এখানে অন্যান্য কনফিগারেশন বাদ দেওয়া হয়েছে ...
location /app/<app_key>
{
proxy_pass http://127.0.0.1:3131;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
}
টিপস উপরের কনফিগারেশনের <app_key> config/plugin/webman/push/app.php তে থেকে পাওয়া যাবে
nginx পুনরায় শুরু করার পর, নিচের পদ্ধতিতে সার্ভার সংযুক্ত করুন
var connection = new Push({
url: 'wss://example.com',
app_key: '<app_key, config/plugin/webman/push/app.php থেকে প্রাপ্ত>',
auth: '/plugin/webman/push/auth' // সাবস্ক্রিপশন অথেন্টিকেশন (শুধুমাত্র প্রাইভেট চ্যানেলের জন্য)
});
টিপস
- অনুরোধের ঠিকানা wss দিয়ে শুরু হতে হবে।
- পোর্ট লেখা যাবে না।
- অবশ্যই ssl সার্টিফিকেটের সাথে মিলিত ডোমেইন ব্যবহার করতে হবে।
push-vue.js ব্যবহার নির্দেশিকা
1、ফাইল push-vue.js প্রকল্প ডিরেক্টরিতে কপি করুন, যেমন: src/utils/push-vue.js
2、ভিউ পৃষ্ঠায় অন্তর্ভুক্ত করুন
<script lang="ts" setup>
import { onMounted } from 'vue'
import { Push } from '../utils/push-vue'
onMounted(() => {
console.log('কম্পোনেন্টটি লোড হয়েছে')
// webman-push ইনস্ট্যান্টিয়েট করুন
// সংযোগ তৈরি করুন
var connection = new Push({
url: 'ws://127.0.0.1:3131', // websocket ঠিকানা
app_key: '<app_key, config/plugin/webman/push/app.php থেকে প্রাপ্ত>',
auth: '/plugin/webman/push/auth' // সাবস্ক্রিপশন অথেন্টিকেশন (শুধুমাত্র প্রাইভেট চ্যানেলের জন্য)
});
// ধরুন ব্যবহারকারীর uid 1
var uid = 1;
// ব্রাউজার user-1 চ্যানেলের বার্তাগুলি শোনে, অর্থাৎ ব্যবহারকারী uid 1 এর বার্তা
var user_channel = connection.subscribe('user-' + uid);
// যখন user-1 চ্যানেলে message ইভেন্টের বার্তা আসে
user_channel.on('message', function (data) {
// data তে বার্তার বিষয়বস্তু আছে
console.log(data);
});
// যখন user-1 চ্যানেলে friendApply ইভেন্টের বার্তা আসে
user_channel.on('friendApply', function (data) {
// data তে বন্ধু আবেদন সম্পর্কিত তথ্য আছে
console.log(data);
});
// ধরুন গ্রুপ আইডি 2
var group_id = 2;
// ব্রাউজার group-2 চ্যানেলের বার্তাগুলি শোনে, অর্থাৎ গ্রুপ 2 এর গ্রুপ বার্তা শোনে
var group_channel = connection.subscribe('group-' + group_id);
// যখন গ্রুপ 2 তে message বার্তা ইভেন্টটি ঘটে
group_channel.on('message', function (data) {
// data তে বার্তার বিষয়বস্তু আছে
console.log(data);
});
})
</script>
অন্যান্য ক্লায়েন্ট ঠিকানা
webman/push pusher এর সাথে সামঞ্জস্যপূর্ণ, অন্যান্য ভাষা (Java Swift .NET Objective-C Unity Flutter Android IOS AngularJS ইত্যাদি) ক্লায়েন্টের ডাউনলোড ঠিকানা:
https://pusher.com/docs/channels/channels_libraries/libraries/