php socket 实现长连接通信 求解

威哥 发布于 2014/03/20 10:09
阅读 19K+
收藏 1
PHP

服务端

<?php

header("Content-Type: text/html; charset=utf-8");
set_time_limit(0);
$host="localhost";
$port=3005;
 
  //创建一个连接
  $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cannot create socket\n");
  //绑定socket到端口
  $result=socket_bind($socket,$host,$port) or die("cannot bind port to socket\n");
  //开始监听这个端口
  $result=socket_listen($socket,4) or die("could not set up socket listen\n");
  //接受连接,另一个socket来处理通信
       socket_set_block($socket);
do
{
    
          $msgsock=socket_accept($socket) or die("cannot accept incoming connection\n");
    
       

      //读取客户端发送过来的信息
      $input=socket_read($msgsock,10240) or die("cannot read input\n");
    
      echo '收到信息:'.$input.'\r\n';
      
      $output = Date("Y-m-d H:i:s").strrev($input).':--->反转';
    
      //对接收到的信息进行处理,然后返回到客户端
      socket_write($msgsock,$output,strlen($output)) or die("cannot write");
      //关闭socket连接
      socket_close($msgsock);
      
      usleep(10000);
    
}while(true);
    

    
 
    socket_close($socket);




?>


// 客户端 实现类似这样

<?php
//header("Connection: Keep-Alive");
//header("Proxy-Connection: Keep-Alive");
header("Content-Type: text/html; charset=utf-8");
set_time_limit(0);
$host="localhost";
$port=3005;

 

 //创建一次 实现多次通信 
    $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cannot create socket\n");
      $conn=socket_connect($socket,$host,$port) or die("cannot connect server\n");     
 
        
        
    
// 模拟多个连接   
for($i=1;$i<=1000;$i++)
{
               //创建一个socket
      //socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>5, 'usec'=>500000));
      //socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR,100);
      socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 10);

      //if($conn){echo "client connect ok!";}
      socket_write($socket,"hello world! i am yzw_$i  client_".$i) or die("cannot write data\n");
     
      $buffer=socket_read($socket,1024,PHP_BINARY_READ);
      
      if($buffer)
      {
        echo "response was:".$buffer."\n";
      }    
      //socket_shutdown($socket,2);
      //flush();
      usleep(1000);        
   
    
}

   socket_close($socket);
      

 



?>

加载中
1
威哥
威哥
该评论暂时无法显示,详情咨询 QQ 群:点此入群
1
hongmajia
hongmajia
see workerman
0
亮亮哥呀
亮亮哥呀
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部