کلاس PHP MySQL Websocket Chat

کلاس PHP MySQL Websocket Chat
13 خرداد 1398, خواندن در 4 دقیقه

در این مقاله میخواهیم به معرفی کلاسی بپردازیم که با اضافه کردن آن به پروژه ی خود قادر خواهید بود تا قابلیت چت را به برنامه ی خود اضافه نمایید.

این بسته می تواند قابلیت چت (Websocket) را به پروژه ی شما اضافه نماید این بسته پیام ها را در MySQL با استفاده از PDO ذخیره می کند و شما میتوانید تاریخچه ی چت ها را در دیتابیس خود جستجو نمایید.

اتصال HTTP Websocket به پایگاه داده طول می کشد تا پیام های چت را بین کاربران در یک اتاق چت اداره کند.

این کلاس همچنین از پیام های خصوصی بین کاربران پشتیبانی می کند.و اجازه میدهد که کاربران به صورت خصوصی با هم چت کنند و پیام ارسال نمایند.

این کلاس یک محیط امن و سریع را در قالب ارتباط با دیتابیس ایجاد مینماید تا بتوان به راحتی در پروژه از قابلیت چت خصوصی و عمومی و همگانی بین کاربران سایت و پورتال استفاده نمود.

از دیگر ویژگی های این کلاس میتوان به سرعت بالای آن در اتصال به دیتابیس اشاره کرد.این کلاس با قواعد و اصول چت روم ها این قابلیت را به پروژه ی شما اضافه میکند و شما قادر خواهید بود با سرعت بالایی چت ها و پیام های رد و بدل شده را در دیتابیس خود پردازش و ذخیره نمایید.

اتصال به  HTTP  در حالت عادی برای چت و... طول میکشد و این که دیتا ها باید در یک اتاق چت پردازش شود سرعت را به شدت کاهش میدهد ولی این کلاس با بهینه کردن توابع خود در مورد ارتباط با پورت ها و دیتابیس قادر است با سرعت بالاتری اتصال با سرور از طریق HTTP  ، جهت مدیریت چت ها و پردازش آن در اتاق چت را برقرار کند.

کلاس Websockets برای اجرای برنامه های تعاملی وب مناسب است زیرا نیاز به ارتباط دو طرفه بین مرورگر و سرور مانند سیستم های چت میباشد که این قابلیت را کلاس websockets دارد.

بیایید با این کلاس بیشتر آشنا شویم:به عنوان مثال اسکریپت زیر برای ایجاد WebSocket در سمت سرویس گیرنده استفاده می شود و دسته بندی های پاسخگو را تعریف می کند تا بتواند رویدادهای مختلف چت  را مدیریت کند:


<script>  

function showMessage(messageHTML) {

$('#chat-box').append(messageHTML);

}



$(document).ready(function(){

var websocket = new WebSocket("ws://localhost:8090/demo/php-socket.php"); 

websocket.onopen = function(event) { 

showMessage("<div class='chat-connection-ack'>Connection is established!</div>");

}

websocket.onmessage = function(event) {

var Data = JSON.parse(event.data);

showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");

$('#chat-message').val('');

};



websocket.onerror = function(event){

showMessage("<div class='error'>Problem due to some Error</div>");

};

websocket.onclose = function(event){

showMessage("<div class='chat-connection-ack'>Connection Closed</div>");

}; 



$('#frmChat').on("submit",function(event){

event.preventDefault();

$('#chat-user').attr("type","hidden");

var messageJSON = {

chat_user: $('#chat-user').val(),

chat_message: $('#chat-message').val()

};

websocket.send(JSON.stringify(messageJSON));

});

});

</script>

برای استفاده از این کلاس شما نیاز به ایجاد یک صفحه ی چت دارید که با استفاده از این کلاس ببتوانید عملیات چت و ارسال و دریافت پیام ها را انجام دهید.
توجه کنید ما در پیام های خود مجموعه ای از مقادیر که شامل پیام،نام کاربری،رنگ و... استفاده می کنیم پس باید مطالب خود را در فرمت JSON به سرور ارسال نماییم.نگران نباشید کلاس Websocket برای این عمل نیز راه کارهای زیادی را ارائه داده است به عنوان مثال به کد زیر توجه کنید:


<script>  

function showMessage(messageHTML) {

$('#chat-box').append(messageHTML);

}



$(document).ready(function(){

var websocket = new WebSocket("ws://localhost:8090/demo/php-socket.php"); 

websocket.onopen = function(event) { 

showMessage("<div class='chat-connection-ack'>Connection is established!</div>");

}

websocket.onmessage = function(event) {

var Data = JSON.parse(event.data);

showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");

$('#chat-message').val('');

};



websocket.onerror = function(event){

showMessage("<div class='error'>Problem due to some Error</div>");

};

websocket.onclose = function(event){

showMessage("<div class='chat-connection-ack'>Connection Closed</div>");

}; 



$('#frmChat').on("submit",function(event){

event.preventDefault();

$('#chat-user').attr("type","hidden");

var messageJSON = {

chat_user: $('#chat-user').val(),

chat_message: $('#chat-message').val()

};

websocket.send(JSON.stringify(messageJSON));

});

});

</script>

برای امنیت در محیط چت خود می توانید از کد زیر استفاده نمایید:

define('HOST_NAME',"localhost"); 

define('PORT',"8090");

$null = NULL;



require_once("class.chathandler.php");

$chatHandler = new ChatHandler();



$socketResource = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_set_option($socketResource, SOL_SOCKET, SO_REUSEADDR, 1);

socket_bind($socketResource, 0, PORT);

socket_listen($socketResource);



$clientSocketArray = array($socketResource);

while (true) {

$newSocketArray = $clientSocketArray;

socket_select($newSocketArray, $null, $null, 0, 10);



if (in_array($socketResource, $newSocketArray)) {

$newSocket = socket_accept($socketResource);

$clientSocketArray[] = $newSocket;



$header = socket_read($newSocket, 1024);

$chatHandler->doHandshake($header, $newSocket, HOST_NAME, PORT);



socket_getpeername($newSocket, $client_ip_address);

$connectionACK = $chatHandler->newConnectionACK($client_ip_address);



$chatHandler->send($connectionACK);



$newSocketIndex = array_search($socketResource, $newSocketArray);

unset($newSocketArray[$newSocketIndex]);

}



foreach ($newSocketArray as $newSocketArrayResource) {

while(socket_recv($newSocketArrayResource, $socketData, 1024, 0) >= 1){

$socketMessage = $chatHandler->unseal($socketData);

$messageObj = json_decode($socketMessage);



$chat_box_message = $chatHandler->createChatBoxMessage($messageObj->chat_user, $messageObj->chat_message);

$chatHandler->send($chat_box_message);

break 2;

}



$socketData = @socket_read($newSocketArrayResource, 1024, PHP_NORMAL_READ);

if ($socketData === false) { 

socket_getpeername($newSocketArrayResource, $client_ip_address);

$connectionACK = $chatHandler->connectionDisconnectACK($client_ip_address);

$chatHandler->send($connectionACK);

$newSocketIndex = array_search($newSocketArrayResource, $clientSocketArray);

unset($clientSocketArray[$newSocketIndex]);

}

}

}

socket_close($socketResource);

توضیح کد بالا: این کد پی اچ پی،درخواست اتصال چت جدید را بررسی می کند. اگر درخواست اتصال جدید ایجاد شود، آن را با چت جدید قبول می کند. سپس با تأیید اتصال کدگذاری شده، مخاطب را در رابطه با اتصال تایید می کند.

این اطلاعات رمزگشایی می شوند تا داده های دریافت شده توسط کلاس بسته بندی شود و آن را به مشتری چت ارسال کند. اطلاعاتی از قبیل ایمیل و نام کاربری و... .
برای نصب این کلاس از طریق composer میتوانید از کد زیر استفاده نمایید:


{

  "require”:

  {

    "phpclasses/mysql-websocket-chat": ">=1.3"

  },

  "repositories”:

  [

    {

      "type": "composer”,

      "url": "https:\/\/www.phpclasses.org\/”

    }

]

}

همچنین برای دریافت فایل های این کلاس و فراخوانی مستقیم آن در پروژه ی خود میتوانید از لینکهای زیر فایلهای این کلاس را دریافت نمایید.

1- https://github.com/andrefigueira/PHP-MySQL-WebSockets-Chat 

2-https://www.phpclasses.org/package/9947-PHP-Websocket-chat-that-stores-messages-in-MySQL.html#download

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
پشتیبانی راکت @roocketir
باور ما اینست که کاربران ایرانی لایق بهترین‌ها هستند، از این رو ما تمام تلاش خود را می‌کنیم تا بتوانیم فیلم‌ها و مقالات آموزشی بروز و کاربردی را در اخ...
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو