عنوان مقاله :

کلاس PHP MySQL Websocket Chat

گردآوری و تالیف : محمد صادق زحمتکش
تاریخ انتشار : 04 مرداد 1396
دسته بندی ها : پی اچ پی

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

این بسته می تواند قابلیت چت (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

برچسب :

مقالات پیشنهادی

اصول SOLID در برنامه نویسی شی گرا قسمت چهارم - Interface segregation principle

در این قسمت از مجموعه مقالات SOLID ، نوبت می رسد به معرفی یک اصل دیگر یه نام Interface segregation principle که به صورت کوتاه ISP هم می گویند. به این...

آرایه ها و توابع مرتبط با آن در زبان php

آرایه متغیری است که می تواند چندین مقدار را در خود نگهداری نماید . این نوع متغیر تمامی موارد مورد نظر را درون خود با یک نام واحد نگهداری کرده . و به ه...

معرفی cms های php - قسمت اول وردپرس

برای پروژه های ایجاد شده با php تعداد زیادی سیستم مدیریت محتوا ایجاد شده است که در این مقاله به معرفی یکی از cms های محبوب php می پردازیم.

کتابخانه ی Dispatch

کتابخانه ی Dispatch  یک کتابخانه ی کوچک و سبک برای PHP است. این کتابخانه به شما در راه اندازی کامل سایت با مدل MVC کمکی نمیکند اما شما با استفاده از ک...

دیدگاه های ارزشمند شما

برای ارسال نظر لازم است ابتدا وارد سایت شوید
هیچ دیدگاهی تا به این لحظه برای این موضوع ثبت نشده است