Đâ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ú ý
- 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]
- 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
- 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
- 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…
- …cho bạn biết cách đúng đắn để tiếp cận lập trình socket trong PHP
- …bắt đầu từ dưới lên, bắt đầu với thuật ngữ mạng cơ bản
- …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
- …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