搜索
首页php教程php手册php socket编程学习笔记

php socket编程学习笔记

Jun 06, 2016 pm 08:13 PM
phpsocket什么学习笔记编程

什么是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里面的代码,避免以后遇到他人遇到过的坑.

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

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

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

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

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器