除了socket函数也可以使用stream函数来实现服务器与客户端。

参考PHP 的Stream实现服务器客户端模型:

http://php.net/manual/en/book.stream.php

http://blog.csdn.net/shagoo/article/details/6396089

服务器端代码:

 <?php
//设置不超时
set_time_limit(0); class SocketServer
{
public function __construct($port)
{
global $errno, $errstr; $socket = stream_socket_server('tcp://127.0.0.1:'.$port, $errno, $errstr);
while($conn = stream_socket_accept($socket, -1))
{
$buff = '';
$data = ''; //读取请求数据直到遇到\r\n结束符
while(!preg_match('#\r\n#', $buff))
{
$buff = fread($conn, 1024);
$data .= preg_replace('#\r\n#', '', $buff);
}
fwrite($conn, $data);
fclose($conn);
}
fclose($socket);
}
} new SocketServer(1212);

客户端

 <?php 

     if(isset($argv[1]))
{
$msg = $argv[1];
$socket = stream_socket_client('tcp://127.0.0.1:1212', $errno, $errstr);
if(!$socket)
{
die($errno.$errstr);
}
else
{
// stream_set_blocking($socket, 0);
for($index = 0; $index < 3; $index++)
{
fwrite($socket, " client: $msg $index ");
usleep(100000);
}
fwrite($socket, "\r\n");
$response = fread($socket, 1024);
file_put_contents('log.txt', date("[H:i:s] ", time()).$response."\n", FILE_APPEND);
fclose($socket);
}
}
else
{
for($index = 0; $index < 3; $index++)
{
system('PHP '.__FILE__." $index:test");
}
}

cli下运行效果

去掉13行的设置非阻塞模式的代码后,客户端由于设置了usleep()延时,无法写入服务器返回的数据。

当然在客户端不在乎接受结果的情况下,可以使用非阻塞模式来获得最大效率。

PHP Socket实现websocket(三)Stream函数的更多相关文章

  1. Socket异步通信学习三

    接下来是客户端部分,采用同步接收模式,在SocketClient项目中新建了一个SynServer类,用于存放socket服务器代码,和AsynServer类似,主要有4个方法: 有一个全局socke ...

  2. C# Socket 实现WebSocket服务器端

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  3. php中使用Curl、socket、file_get_contents三种方法POST提交数据

    抓取远程内容,之前一直都在用file_get_content函数,其实早就知道有curl这么一个好东西的存在,但是看了一眼后感觉使用颇有些复杂,没有file_get_content那么简单,再就是需求 ...

  4. php常用Stream函数集介绍

    php常用Stream函数集介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-24   本篇文章是对php中的常用Stream函数集进行了详细的分析介绍,需要的朋友参考下     ...

  5. socket编程中客户端常用函数

    1 常用函数 1.1   connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...

  6. socket通信原理三次握手和四次握手详解

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP?2.         Sock ...

  7. C#高性能大容量SOCKET并发(三):接收、发送

    原文:C#高性能大容量SOCKET并发(三):接收.发送 异步数据接收有可能收到的数据不是一个完整包,或者接收到的数据超过一个包的大小,因此我们需要把接收的数据进行缓存.异步发送我们也需要把每个发送的 ...

  8. TCP UDP socket http webSocket 之间的关系

    ---恢复内容开始--- OSI&TCP/IP模型 要弄清tcp udp socket http websocket之间的关系,首先要知道经典的OSI七层模型,与之对应的是TCP/IP的四层模 ...

  9. Socket与WebSocket以及http与https重新总结

    Socket与WebSocket以及http与https重新总结 一.Socket 网络中的Socket是一个抽象的接口 ,而是为了方便使用TCP或UDP而抽象出来的一层 ,可以理解为网络中连接的两端 ...

随机推荐

  1. CentOS terminal 安装 matlab(mode=silent)

    1. 下载matlab for Unix 2014 ,需要crack文件 2. 挂载iso文件, mount -o loop,ro Mathworks.Matlab.R2014a.iso /media ...

  2. Objective-C学习笔记之NSData、NSDate

    NSData和NSMutableData存储的是二进制数据,在文件操作,网络,以及核心图形图像中使用较广泛.NSData创建后不可以再修改,NSMutableData可以再次修 NSString *s ...

  3. Win10微软官方最终正式版ISO镜像文件

    Win10微软官方最终正式版ISO镜像文件 据说Windows 10是微软发布的最后一个Windows版本,下一代Windows将作为Update形式出现.Windows 10将发布7个发行版本,分别 ...

  4. 删除ibus之后导致系统设置进不了

    sudo apt-get instal ubuntu-desktop 快捷键调出sogou拼音,默认为"ctrl+,"

  5. HTML学习笔记——frameset和marquee

    1>frameset 效果如百Google度 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  6. 第4章 jQuery的事件和动画(二)

    二. jQuery中的动画 动画在前面几章案例中是回避不了的问题.此处结合一些简便的写法稍作系统的分析. 1. show()和hide()(1)介绍——不用过多的介绍了jQuery最基本的方法.本质是 ...

  7. Ubuntu用作Server时出现乱码的解决方法

    下面给出解决办法: 1.用vi编辑器修改/etc/default/local文件 2.把原来的中文编码替换成下面的 LANG="en_US.UTF-8" LANGUAGE=&quo ...

  8. 详细整合教程(Spring+SpringMVC+MyBatis)

    详细整合教程(Spring+SpringMVC+MyBatis) http://blog.csdn.net/gebitan505/article/details/44455235/

  9. jQuery/js 正则收集(邮件验证、)

    var reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/; //验证邮箱的正则表达式if( ...

  10. 集合 ArrayList

    /* * 功能:演示java集合的用法:ArrayList */ package com.jihe; //先引入一个包 import java.util.ArrayList; public class ...