search
Homephp教程php手册php socket编程学习笔记

php socket编程学习笔记

Jun 06, 2016 pm 08:13 PM
phpsocketWhatstudynotesprogramming

什么是socket? socket是进程间通信共享数据的一种方式。 为什么要用socket? 不同服务器进程间进行数据共享无论是用mysql,redis都是要通过socket进行,所以对于需求量不大的进程间通信,socket是一种简单快捷轻量级的解决方法。 完成一个socket通信要进行哪些

什么是socket?

socket是进程间通信共享数据的一种方式。

为什么要用socket?

不同服务器进程间进行数据共享无论是用mysql,redis都是要通过socket进行,所以对于需求量不大的进程间通信,socket是一种简单快捷轻量级的解决方法。

完成一个socket通信要进行哪些步骤?

d000baa1cd11728b45647b06cafcc3cec3fd2c4c

不仅仅是php,目前所有的socket通信都是这个步骤。具体到代码层面就是下面这个样子:

server端代码

// 获取协议??
$commonProtocol = getprotobyname("tcp");??
//产生一个socket??
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);??
//把socket绑定在一个IP地址和端口上??
socket_bind($socket, 'localhost', 1337);???
//监听由指定socket的所有连接??
socket_listen($socket);??
//初始化buffer??
$buffer = "NO DATA";??
while(true) {??
???? //接受一个Socket连接??
???? $connection = socket_accept($socket);??
???? printf("Socket connected\r\n");??
???? // 检测 buffer??
???? if($buffer != ""){??
????????? printf("Something is in the buffer...sending data...\r\n");??
????????? //写数据到socket缓存??
????????? socket_write($connection, $buffer . "\r\n");??
????????? printf("Wrote to socket\r\n");??
???? }else {??
????????? printf("No Data in the buffer\r\n");??
???? }??
???? //读取指定长度的数据??
???? while($data = socket_read($connection, 1024, PHP_NORMAL_READ))??
???? {??
????????? $buffer = $data;??
????????? //写数据到socket缓存??
????????? socket_write($connection, "Information Received\r\n");??
????????? printf("Buffer: " . $buffer . "\r\n");??
???? }??
???? //关闭一个socket资源??
???? socket_close($connection);??
???? printf("Closed the socket\r\n\r\n");??
}

client端代码

// 创建 socket??
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);??
//链接 socket??
$connection = socket_connect($socket,'localhost', 1337);??
//读取指定长度的数据??
while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {??
??? if($buffer == "NO DATA") {??
??????? printf("NO DATA");??
??????? break;??
??? }else{??
??????? // 输出 buffer??
??????? printf("Buffer Data: " . $buffer . "");??
??? }??
}??
printf("Writing to Socket");??
//写数据到socket缓存??
if(!socket_write($socket, "SOME DATA\r\n")){
??? printf("Write failed");??
}??
//读取指定长度的数据??
while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)){??
??? printf("Data sent was: SOME DATA Response was:" . $buffer . "");??
}??
printf("Done Reading from Socket");?

延伸阅读

现在有一些比较成熟的php socket扩展,比如swoole?http://wiki.swoole.com/?和workerman?http://www.workerman.net/?使用这些扩展可以让你事半功倍。

想要学好php socket,基本知识还是非常重要的,建议花点时间把官方文档 http://php.net/manual/zh/book.sockets.php 里面的相关函数浏览一遍,练习一下comment里面的代码,避免以后遇到他人遇到过的坑.

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software