首页 > 代码库 > socket 初步使用
socket 初步使用
socket分为2个部分,1部分是服务器端,监听某个接口,当有客户端有请求时,自动运行代码。
第二个部分是客户端,来传送数据。
<?php //服务器端口
header(‘Content-type:text/html;Charset=GBK‘); //服务器段程序,监听借口,并进行相应的数据处理 /* socket 服务器通信整个过程 socket_creat socket_bind socket_listen socket_accetp socket_read socket_write socket_close */ //1,创建通信节点 $socket = socket_create(AF_INET,SOCK_STREAM,0); if(!$socket) exit(‘create error : ‘ . socket_strerror(socket_last_error())); //2,绑定制定端口 $ip = ‘127.0.0.1‘; $port = ‘1935‘; $res = socket_bind($socket,$ip,$port); if(!$res) exit(‘bind error:‘ . socket_strerror(socket_last_error())); //3, 开始监听 $res = socket_listen($socket); if(!$res) exit(‘listen error ‘ . socket_strerror(socket_last_error())); //4,接收一个通信,处理 do { $msgsock = socket_accept($socket); if(!$msgsock) exit(‘accetp error:‘ . socket_strerror(socket_last_error())); //读出客户端传入的数据 $msgclient = socket_read($msgsock, 1024); if($msgclient === false) exit(‘read error:‘ . socket_strerror(socket_last_error())); echo ‘收到客户端数据:‘ . $msgclient; //返回信息 $remsg = ‘已经收到请求!处理完毕!123‘; $res = socket_write($msgsock, $remsg); if($res === false) exit(‘write error :‘ . socket_strerror(socket_last_error())); //相关操作 echo ‘正在进行操作...‘; sleep(10); //释放资源 socket_close($msgsock); }while(true); //5,释放资源 socket_close($socket);//触发端口,让服务器程序运行,端口设置为 1935 //初始化 $ip = ‘127.0.0.1‘; $port = ‘1935‘; /* socket链接整个过程 1,socket_create 第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET; 第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部); 第三个参数指定应用程序所使用的通信协议。此参数可以指定单个协议系列中的不同传输协议。在Internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。 2,socket_connect 3,socket_write 4,socket_read 5,socket_close */ //1,创建通信节点 $socket = socket_create(AF_INET,SOCK_STREAM,0); if($socket === false) exit(‘创建节点失败!错误信息:‘ . socket_strerror(socket_last_error())); echo ‘创建节点成功,准备链接...‘,‘<br />‘; //2,开始链接 $res = socket_connect($socket,$ip,$port); if (!$res) { exit(‘连接节点失败!失败原因:‘ . socket_strerror(socket_last_error())); } echo ‘链接成功!准备发送....‘,‘<br />‘; //3,发送数据 $buffer = ‘发送一个请求!‘ . "\r\n"; $res = socket_write($socket, $buffer); if($res === false) exit(‘发送请求失败!失败原因:‘ . socket_strerror(socket_last_error())); //4,接受服务器回传信息 $out = socket_read($socket, 8192); if ($out === false) { exit(‘获取服务器回传内容失败!原因:‘ . socket_strerror(socket_last_error())); } if ($out) echo ‘获取到服务器回传内容--><strong style="color:red">‘ . $out . ‘</strong>‘; else echo ‘服务器没有回传内容!‘; //关闭链接 socket_close($socket);
运行后发现缺点,就是还是单进程的。
当服务器运行速度很慢时候,会造成客户端长时间的等待。不利于用户体验。
目前自己的想法是就要利用php实现多进程来配合使用,多进程的实现为一般有两种方法,一种是使用PHP自带的pcntl_*函数(仅限linux),另一种就是使用popen/proc_open,然后在php内部控制进程数量。
明天进行研究。(linux下使用fork。)
目前只是简单的了解并且使用。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。