什么是socket? socket是进程间通信共享数据的一种方式。 为什么要用socket? 不同服务器进程间进行数据共享无论是用mysql,redis都是要通过socket进行,所以对于需求量不大的进程间通信,socket是一种简单快捷轻量级的解决方法。 完成一个socket通信要进行哪些
什么是socket?
socket是进程间通信共享数据的一种方式。
为什么要用socket?
不同服务器进程间进行数据共享无论是用mysql,redis都是要通过socket进行,所以对于需求量不大的进程间通信,socket是一种简单快捷轻量级的解决方法。
完成一个socket通信要进行哪些步骤?
不仅仅是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里面的代码,避免以后遇到他人遇到过的坑.
原文地址:php socket编程学习笔记, 感谢原作者分享。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6
視覺化網頁開發工具