Học lập trình socket trong php

Đây là bài viết về kiến ​​thức cơ bản về lập trình socket trong PHP và cách đi đúng hướng. tôi đă nghĩ dó rất thu vị

Sau đó, tôi nghĩ lại, tôi đã vật lộn với khái niệm này như thế nào khi tôi bắt đầu lập trình, gần 10 năm trước. Lúc đầu, máy chủ đang gây chú ý

  1. Có hai cách để làm điều này trong PHP. Và bạn phải tự mình khám phá ra cách thú vị [nó không phải là cách rõ ràng]
  2. Bạn cần biết một số thuật ngữ về mạng để hiểu đúng về nó, thuật ngữ này thường bị bỏ qua trong sách lập trình. Đặc biệt là trong sách về lập trình bằng PHP
  3. Hướng dẫn sử dụng PHP thường rất khó đọc. Các ví dụ tốt, đơn giản và có thể điều chỉnh được khó có được
  4. Chúng ta đã quen với việc PHP bắt đầu từ bộ nhớ mới trên mỗi yêu cầu, các máy chủ hoàn toàn khác nhau

Vì vậy, điều này hút. Hãy khắc phục điều này

Điều gì sẽ xảy ra nếu bạn có một cuốn sách, rằng…

  1. …cho bạn biết cách đúng đắn để tiếp cận lập trình socket trong PHP
  2. …bắt đầu từ dưới lên, bắt đầu với thuật ngữ mạng cơ bản
  3. …cung cấp các ví dụ đơn giản, có thể chỉnh sửa mà bạn có thể sử dụng làm cơ sở cho nội dung của mình
  4. …và có người sẵn sàng giải đáp mọi thắc mắc của bạn nếu bạn gặp khó khăn

Sổ tay lập trình PHP Socket nhỏ

Có sẵn NGAY BÂY GIỜ với giá chỉ 29 € [có thể ít hơn số tiền bạn kiếm được trong một giờ], hướng dẫn của bạn để xây dựng những thứ tuyệt vời với ổ cắm trong PHP

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

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 để giao tiếp với máy chủ

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

Sau khi tạo xong WebSocket có các callback để xử lý các sự kiện xảy ra giữa client và server trong quá trình chat

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

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 trình xử lý này đưa ra xác nhận về trạng thái kết nối, tin nhắn trò chuyện và lỗi nếu có

Tin nhắn 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 hộp trò chuyện. Ngoài giải mã mã hóa JSON, PHP hỗ trợ rất nhiều để xử lý dữ liệu JSON theo lập trình để đọc phân tích cú pháp ghi và hơn thế nữa


Lập trình PHP Socket cho ứng dụng Chat

Mã PHP này kiểm tra yêu cầu kết nối ổ cắm mới. Nếu tìm thấy bất kỳ yêu cầu kết nối mới nào, 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ó sẽ gửi một xác nhận cho máy khách 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à giải mã và giải mã dữ liệu đó để gộp dữ liệu nhận được và gửi đến ứng dụng khách trò chuyện. Các chức năng bắt tay, đóng dấu, hủy niêm phong, gửi đượ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 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

PHP có tốt cho lập trình socket không?

Lập trình ổ cắm có thể được định nghĩa là phương pháp lập trình có máy chủ và máy khách là ứng dụng trong đó kết nối phải được thiết lập giữa cả hai để tạo điều kiện giao tiếp giữa chúng. Về PHP, nó cũng cho phép chúng tôi triển khai khái niệm lập trình socket .

Việc sử dụng lập trình socket trong PHP là gì?

Lập trình ổ cắm là 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 một IP, trong khi ổ cắm khác tiếp cận với cổng kia để tạo kết nối. Máy chủ hình thành ổ cắm người nghe trong khi máy khách liên hệ với máy chủ.

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

Lập trình ổ cắm hiển thị cách sử dụng API ổ cắm để thiết lập liên kết giao tiếp giữa các quy trình từ xa và cục bộ . Các quy trình sử dụng ổ cắm có thể nằm trên cùng một hệ thống hoặc các hệ thống khác nhau trên các mạng khác nhau. Ổ cắm hữu ích cho cả ứng dụng mạng và ứng dụng độc lập.

Ổ cắm trong laravel là gì?

Laravel WebSockets là gói dành cho Laravel 5. 7 trở lên sẽ giúp ứng dụng của bạn bắt đầu với WebSockets ngay lập tức . Nó có trình thay thế API Pusher thả xuống, có bảng điều khiển gỡ lỗi, thống kê thời gian thực và thậm chí cho phép bạn tạo bộ điều khiển WebSocket tùy chỉnh.

Chủ Đề