在workerman中我们可以看到常用的socket事件onConnect,onMessage,onClose,实际上socket不存在这些事件,workerman只是为了方便开发者。自己也在写相关的东西,正好记录下。(1).当socket可读,通过stream_socket_accept 或者socket_accept成功接受套接字上的连接那么此时应该触发onConnect回调(2).当socket可读,通过fread获取到客户端数据,当然如果包含具体协议,应该按照协议拿到完整的客户端数据,此
socket_import_stream函数可以将使用stream_socket_server创建stream socket句柄转换为标准的socket句柄,因为标准socket支持更多的配置选项。在workerman中有如下代码:if (function_exists('socket_import_stream') && self::$_builtinTransports[$this->transport] ===&
php中stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() 和 fileperms()函数都是存在缓存的,在同一个会话中都是读取
由于需要为自己的php守护进程投递闭包函数来执行,但是发现php官方根本没有提供php闭包函数的序列化功能。后来在mixphp文档发现了mixphp支持异步进程执行投递的闭包函数才发现了一个神奇的php闭包函数序列化composer包(1).安装序列化composer包composer require opis/closure(2).进行闭包函数的序列化测试//(1).设置闭包函数 $a = function () { &nbs
    /**      * 设置进程标题      * @param string $title      */     public static function cli_set_pro
stream_set_blocking函数可以将资源流设置为阻塞模式或者非阻塞模式,主要影响的函数分别是fgets,fread,其他的手册没有说。在socket编程中,如果一个socket连接上了,但是不发送数据,此时使用fread或者fgets去读取数据,由于socket句柄是有效的,但是获取不到数据,fread/fgets就会阻塞等待卡在那里,一直等到超时才继续向下执行。看下面的阻塞等待demo:服务器:<?php $socket = stream_socket_
服务端:<?php $socket = stream_socket_server('tcp://127.0.0.1:8888', $errno, $errstr); while ($conn = stream_socket_accept($socket)) {     fwrite($conn, "1024");  
当我用ab进行对php socket代码进行并发测试出现问题,经过排查是我直接对客户端进行发送消息,没有先读取客户端消息造成的。    $text = "hello world" . PHP_EOL; fwrite($conn, $text); fclose($conn);修改为//读取client发送的信息 $client_msg = fread($conn
stream_socket_accept  $peername参数将对应客户端的地址和端口输出:$conn = stream_socket_accept($socket,0,$peerName);127.0.0.1:57034输出连接的客户端的ip和端口而stream_socket_get_name同时支持获取当前服务器/客户端的ip和端口stream_socket_get_name($conn,false) //获取的是服务端ip和端口 stream_

Top