Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 103,429

HOME > PHP > PHP WebSockets > WebSocket ตอนที่ 5 : ตัวอย่างการ รับ-ส่ง ข้อมูลแบบ เจาะจง Client หรือ User ด้วย PHP



WebSocket ตอนที่ 5 : ตัวอย่างการ รับ-ส่ง ข้อมูลแบบ เจาะจง Client หรือ User ด้วย PHP

WebSocket ตอนที่ 5 : ตัวอย่างการ รับ-ส่ง ข้อมูลแบบ เจาะจง Client หรือ User ด้วย PHP ในการเขียน WebSocket เพื่อทำงานแบบ Real Time เมื่อ Services ทำการ push ข้อความไปยัง Client เราจะเห็นว่าทุกๆ Client จะได้รับข้อความพร้อมกันหมด แต่ในการเขียนโปรแกรมจริง บางครั้งเราอาจจะต้องการให้ข้อความส่งให้ถึงแค่บาง Client เท่านั้น ซึ่งวิธีการจะทำแบบนี้มันก็ไม่ได้เขียนอะไรเพิ่มมากมาย เราเพียงแค่กำหนดเงื่อนไขตอนที่แสดงผลว่า ข้อความนั้นๆ จะสดงผลที่ Client นี้หรือไม่ โดยอาจจะกำหนดเงื่อนไขเพิ่ม To เข้ามา และแปลงข้อความที่จะส่งไปนั้นให้อยู่ในรูปแบบของ json เพราะสามารถกำหนดค่าได้หลายค่า และเมื่อ Client ได้รับค่า json ก็จะแปลงข้อความกลับมาว่าข้อความที่ส่งมานั้นตรง To เป็นของตัวเองหรือไม่



ออกแบบหน้าจอสำหรับ Chat โดยมีช่อง To เพิ่มเข้ามา ซึ่งจะใช้ระบุปลายทางของผู้รับ


ในส่วนของคำสั่งที่จะต้องปรับปรุงเพิ่มเติมคือ doSend() ซึ่งแต่ก่อนจะส่งแค่ข้อความไป แต่ตัวนี้เราจะแปลงให้เป็น json ก่อนที่จะส่ง

function doSend() {
	 var strMessage = '@<b>' + $('#txtName').val() + '</b>: ' + $('#txtMessage').val();
	var jsonSend = JSON.stringify({ "fromUser": $('#txtName').val(), "toUser" : $('#txtTo').val(), "mMessage" : strMessage });
	// {"fromUser":"win","toUser":"max","mMessage":"@win: test"}

	if ($('#txtName').val() == '') {
        alert('Enter your [Name]');
		$('#txtName').focus();
		return '';
    } else if ($('#txtTo').val() == '') {
        alert('Enter your [To]');
		$('#txtTo').focus();
		return '';
    } else if ($('#txtMessage').val() == '') {
        alert('Enter your [Message]');
		$('#txtMessage').focus();
		return '';
    }
   
    socket.send(jsonSend);
    writeMessage(strMessage);

    $('#txtMessage').val('');
	$('#txtMessage').focus();
}
รูปแบบของข้อความ json
// {"fromUser":"win","toUser":"max","mMessage":"@win: test"}


ในส่วนของการรับ Message ก็จะรับข้อความที่เป็น json และเช็คเงื่อนไขว่า To ตรงกับตัวเองหรือไม่
function onMessage(e) {
	var obj = jQuery.parseJSON(e.data);
	var fromUser = obj.fromUser;
	var toUser = obj.toUser;
	var mMessage = obj.mMessage;

	if($('#txtName').val() == toUser)
	{
		writeMessage('<span style="color: blue;"> ' + mMessage + '</span>');
	}
}
ถ้าข้อความ To ตรงกับตัวเองก็จะแสดงข้อความออกทางหน้าจอ

Code ใหม่ทั้งหมด

index.php
<!DOCTYPE html>
<html>
    <head>
        <title>PHP WebSocket Chat</title>
        <link type="text/css" rel="stylesheet" href="style.css" />
        <script src="jquery-1.7.2.min.js"></script>
    </head>

    <style type="text/css">

		body {
			font:12px arial;
			color: #222;
			text-align:center;
			padding:35px; 
		}

		#chatbox {
			text-align:left;
			margin:0 auto;
			margin-bottom:25px;
			padding:10px;
			background:#fff;
			height:270px;
			width:430px;
			border:1px solid #ACD8F0;
			overflow:auto; 
		}

    </style>
    <body>
        <div id="ws_support"></div>
        <div id="wrapper">
            <div id="menu">
                <h3 class="welcome">PHP Web Chat</h3>
            </div>
            <div id="chatbox"></div>    
               Name <input name="txtName" type="text" id="txtName" size="5"/>
			   To <input name="txtTo" type="text" id="txtTo" size="5"/>
                Message <input name="txtMessage" type="text" id="txtMessage" size="28" placeholder="" />
                <input name="btnSend" type="button"  id="btnSend" value="Send" />
        </div>
    </body>
</html>

<script language="javascript">

var socket;

function webSocketSupport()
{
    if (browserSupportsWebSockets() === false) {
        $('#ws_support').html('<h2>Sorry! Your web browser does not supports web sockets</h2>');
        $('#wrapper').hide();
        return;
    }

	// Open Connection
    socket = new WebSocket('ws://localhost:8089');

    socket.onopen = function(e) {
        writeMessage("You have have successfully connected to the server");
    };

    socket.onmessage = function(e) {
        onMessage(e)
    };

    socket.onerror = function(e) {
        onError(e)
    };

}

function onMessage(e) {
	var obj = jQuery.parseJSON(e.data);
	var fromUser = obj.fromUser;
	var toUser = obj.toUser;
	var mMessage = obj.mMessage;

	if($('#txtName').val() == toUser)
	{
		writeMessage('<span style="color: blue;"> ' + mMessage + '</span>');
	}
}

function onError(e) {
    writeMessage('<span style="color: red;">Error!!</span> ' + e.data);
}

function doSend() {
	 var strMessage = '@<b>' + $('#txtName').val() + '</b>: ' + $('#txtMessage').val();
	var jsonSend = JSON.stringify({ "fromUser": $('#txtName').val(), "toUser" : $('#txtTo').val(), "mMessage" : strMessage });
	// {"fromUser":"win","toUser":"max","mMessage":"@win: test"}

	if ($('#txtName').val() == '') {
        alert('Enter your [Name]');
		$('#txtName').focus();
		return '';
    } else if ($('#txtTo').val() == '') {
        alert('Enter your [To]');
		$('#txtTo').focus();
		return '';
    } else if ($('#txtMessage').val() == '') {
        alert('Enter your [Message]');
		$('#txtMessage').focus();
		return '';
    }
   
    socket.send(jsonSend);
    writeMessage(strMessage);

    $('#txtMessage').val('');
	$('#txtMessage').focus();
}

function writeMessage(message) {
	$('#chatbox').append(message + '<br>');
}

function browserSupportsWebSockets() {
    if ("WebSocket" in window)
    { return true; }
    else
    {  return false; }
}

$(document).ready(function() {
		webSocketSupport();
}); 

$('#btnSend').click(function () {
	doSend();
});
</script>









ทดสอบการทำงาน

ให้ทำการเปิดหน้าจอขึ้นมา 3 หน้า โดยใช้ User ที่แตกต่างกัน

PHP WebSocket Client User

หน้าจอแรก

PHP WebSocket Client User

หน้าจอที่สอง

PHP WebSocket Client User

หน้าจอที่สาม

PHP WebSocket Client User

หน้จอทั้งสามเปิดขึ้นมาพร้อมกับ เพราะเราจะทดสอบส่งข้อความจากหน้าจอใดหน้าจอหนึ่ง

PHP WebSocket Client User

ทดสอบข้อความจาก max ไปหา rut ซึ่ง rut ก็จะได้รับข้อความเพียงคนเดียว

PHP WebSocket Client User

ส่วน tookta ก็จะไม่ได้รับข้อความแต่อย่างใด

PHP WebSocket Client User

หรือจะทดสองส่งจาก tookta ไปหา rut ก็จะได้ผลลัพธ์เช่นเดียวกัน







.

   
Share


ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท


ลองใช้ค้นหาข้อมูล


   


Bookmark.   
       
  By : ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)
  Score Rating :  
  Create/Update Date : 2017-01-26 13:24:32 / 2017-03-25 02:00:17
  Download : No files
 Sponsored Links / Related

 
WebSocket ตอนที่ 1 : WebSocket คืออะไร การรับส่งข้อมูลแบบ Real Time ด้วย PHP
Rating :

 
WebSocket ตอนที่ 2 : การติดตั้ง PHP Library จาก Composer เพื่อเขียน WebSockets
Rating :

 
WebSocket ตอนที่ 3 : การสร้าง Server ทำหน้าที่ รับ-ส่ง ข้อมูล Real Time ด้วย PHP
Rating :

 
WebSocket ตอนที่ 4 : Client เชื่อมต่อ Servcies ของ WebSocket การรับ-ส่งข้อมูล Real Time ด้วย PHP
Rating :

 
WebSocket ตอนที่ 6 : การ รับ-ส่ง ข้อมูล Real Time และการจัดเก็บลงใน Database ด้วย PHP
Rating :


ThaiCreate.Com Forum

Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน Struts การเขียนโปรแกรม Java Struts Framework
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน Yii  Framework การเขียนโปรแกรม ภาษา PHP กับ Yii
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว

สุดยอด Source Code V2.0
 

แจ้งชำระเงิน/โอนเงิน
 

Hit Link
   


Acc : thaicreate@hotmail.com






Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2017 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
for Contact Us : [Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 084-715-5121 อัตราราคา คลิกที่นี่