Hướng dẫn develop your own php chat application using socket tcp programming - phát triển ứng dụng trò chuyện php của riêng bạn bằng cách sử dụng lập trình socket tcp

bởi Vincy. Sửa đổi lần cuối vào ngày 15 tháng 7 năm 2022.

Trong hướng dẫn này, chúng tôi sẽ tạo một ứng dụng trò chuyện đơn giản bằng cách sử dụng lập trình ổ cắm WebSocket và PHP. WebSocket được sử dụng để tạo một cây cầu để gửi hoặc nhận tin nhắn từ máy chủ chat PHP.

Trong thế giới web, chúng tôi thường sử dụng các phương thức yêu cầu HTTP để giao tiếp giữa phía máy khách và máy chủ. Trong ví dụ trò chuyện này, chúng tôi sử dụng ổ cắm để liên lạc với máy chủ.

Để thiết lập kết nối ổ cắm A & NBSP; giữa máy khách và máy chủ, chúng tôi sử dụng giao thức & NBSP; WebSocket (WS: //) để chỉ định địa chỉ của trang PHP nơi xử lý bắt tay WebSocket.

Sau khi tạo WebSocket, có các cuộc gọi lại để xử lý các sự kiện xảy ra giữa máy khách và máy chủ trong quá trình trò chuyện.

Tạo trình xử lý sự kiện WebSocket và Callback

Tập lệnh sau được sử dụng để tạo WebSocket ở phía máy khách và xác định trình xử lý gọi lại để xử lý các sự kiện trò chuyện khác nhau. Những người xử lý này đưa ra sự thừa nhận về trạng thái kết nối, tin nhắn trò chuyện và các lỗi nếu có.

Hướng dẫn develop your own php chat application using socket tcp programming - phát triển ứng dụng trò chuyện php của riêng bạn bằng cách sử dụng lập trình socket tcp

Thông báo trò chuyện được mã hóa ở định dạng JSON và được gửi đến máy chủ khi gửi.

Dữ liệu được mã hóa sẽ được giải mã trong điểm cuối PHP để tạo phiên bản tin nhắn Chatbox. Ngoài giải mã mã hóa JSON, PHP hỗ trợ rất nhiều để xử lý dữ liệu JSON một cách lập trình để đọc Write & nbsp; Parse và nhiều hơn nữa.


Lập trình ổ cắm PHP cho ứng dụng trò chuyện

Mã PHP này kiểm tra yêu cầu kết nối ổ cắm mới. Nếu bất kỳ yêu cầu kết nối mới nào được tìm thấy, thì nó sẽ chấp nhận và thực hiện bắt tay với tài nguyên ổ cắm mới.

Sau đó, nó gửi một sự thừa nhận cho khách hàng về kết nối bằng cách niêm phong thông báo xác nhận được mã hóa.

Nó nhận dữ liệu ổ cắm được gửi qua các kết nối hiện có và không thực hiện và giải mã nó để gói dữ liệu nhận được và gửi cho máy khách trò chuyện. Việc bắt tay, niêm phong, không thực tế, gửi các chức năng được xử lý bằng cách sử dụng lớp 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);
?>

Và lớp xử lý trò chuyện là

 125 && $length < 65536)
			$header = pack('CCn', $b1, 126, $length);
		elseif($length >= 65536)
			$header = pack('CCNN', $b1, 127, $length);
		return $header.$socketData;
	}

	function doHandshake($received_header,$client_socket_resource, $host_name, $port) {
		$headers = array();
		$lines = preg_split("/\r\n/", $received_header);
		foreach($lines as $line)
		{
			$line = chop($line);
			if(preg_match('/\A(\S+): (.*)\z/', $line, $matches))
			{
				$headers[$matches[1]] = $matches[2];
			}
		}

		$secKey = $headers['Sec-WebSocket-Key'];
		$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
		$buffer  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
		"Upgrade: websocket\r\n" .
		"Connection: Upgrade\r\n" .
		"WebSocket-Origin: $host_name\r\n" .
		"WebSocket-Location: ws://$host_name:$port/demo/shout.php\r\n".
		"Sec-WebSocket-Accept:$secAccept\r\n\r\n";
		socket_write($client_socket_resource,$buffer,strlen($buffer));
	}
	
	function newConnectionACK($client_ip_address) {
		$message = 'New client ' . $client_ip_address.' joined';
		$messageArray = array('message'=>$message,'message_type'=>'chat-connection-ack');
		$ACK = $this->seal(json_encode($messageArray));
		return $ACK;
	}
	
	function connectionDisconnectACK($client_ip_address) {
		$message = 'Client ' . $client_ip_address.' disconnected';
		$messageArray = array('message'=>$message,'message_type'=>'chat-connection-ack');
		$ACK = $this->seal(json_encode($messageArray));
		return $ACK;
	}
	
	function createChatBoxMessage($chat_user,$chat_box_message) {
		$message = $chat_user . ": 
" . $chat_box_message . "
"; $messageArray = array('message'=>$message,'message_type'=>'chat-box-html'); $chatMessage = $this->seal(json_encode($messageArray)); return $chatMessage; } } ?>

Thiết lập kết nối bằng cách sử dụng dòng lệnh

Hình ảnh sau đây hiển thị màn hình dòng lệnh để thiết lập kết nối để bắt đầu trò chuyện bằng cách sử dụng ứng dụng này.

Hướng dẫn develop your own php chat application using socket tcp programming - phát triển ứng dụng trò chuyện php của riêng bạn bằng cách sử dụng lập trình socket tcp

Tải xuống

Trở lại đầu

Làm thế nào để bạn tạo một ứng dụng trò chuyện bằng cách sử dụng Ổ cắm IO?

Bắt đầu..
Bắt đầu dự án của chúng tôi ..
Cài đặt gói ..
Thiết lập ứng dụng Express và nghe máy chủ ..
Tạo một phần mềm trung gian tĩnh ..
Sử dụng socket.io trên phía máy chủ (index.js) và ở mặt trước (index.html).
Mô hình đối tượng tài liệu truy vấn (DOM).
Tin nhắn phát sóng ..

Tôi có thể sử dụng websockets với PHP không?

Ổ cắm như nguồn tạo ra, đó là, PHP có mọi thứ cần thiết để làm việc với WebSockets.PHP has everything it needs to work with WebSockets.

Lập trình ổ cắm trong PHP là gì?

Lập trình ổ cắm là một cách kết nối hai nút trên mạng để giao tiếp với nhau.Một ổ cắm (nút) lắng nghe trên một cổng cụ thể tại IP, trong khi các ổ cắm khác đưa ra sang bên kia để tạo thành kết nối.Máy chủ tạo thành ổ cắm người nghe trong khi máy khách tiếp cận với máy chủ.a way of connecting two nodes on a network to communicate with each other. One socket(node) listens on a particular port at an IP, while other socket reaches out to the other to form a connection. The server forms the listener socket while the client reaches out to the server.

Làm thế nào để bạn tạo một cuộc trò chuyện trên WebSocket?

Tạo một ứng dụng web trò chuyện thời gian thực với WebSocket..
Tạo một tệp HTML.Tạo một tệp HTML, giả sử Piesocket.....
Kết nối với máy chủ WebSocket.....
Nghe cho các sự kiện.....
Thêm giao diện người dùng trò chuyện.....
Xử lý các sự kiện.....
Các sự kiện gây nên.....
Gói lên!....