عنوان مقاله :

کلاس 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

برچسب :

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

کلاس PHP Validation

کلاس PHP Validation مجموعه ای از قوانین و متد های اعتبار سنجی است که به شما این اجازه را می دهد تا اعتبار سنجی سمت سرور را به فرم های خود با سرعت و با...

کلاس پی اچ پی svg-math-graphics

کلاس svg-math-graphics گرافیک توابع ریاضی را در فرمت SVG در قالب نمودار نمایش میدهد و شما میتوانید در پروژه php  خود با استفاده از آنالیز ریاضی ، داده...

کلاس PHP Live Radio Streaming

در این مقاله قصد داریم به معرفی یکی دیگر از  کلاس های حوزه ی  Audioاز مجموعه کلاس های php بپردازیم.با ما همراه باشید . کلاسی که در این مقاله درباره ی...

کلاس پی اچ پی Numeric TTS

در واقع پخش رقم به رقم کدها و رمز هایی که به صورت عدد و رقم هستند با استفاده از پردازش صوت با توجه به رشته یا عدد موجود در برنامه میسر است که به تنهای...

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

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