什么是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无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器