zoukankan      html  css  js  c++  java
  • 用php模拟做服务端侦听端口

    参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html

    http://blog.csdn.net/alongken2005/article/details/8056910

    socket_accept()是服务端接受客户端请求,一旦有一个客户端链接上来的话,则这个函数会返回一个新的socket资源,这个资源是与客户端通信的资源。

     socket_accept()是阻塞的,会一直卡在那里。

    发现情况:一旦客户端断开链接了,会影响到服务端的主进程。如何避免这个影响呢?

    正常的服务器,应该是新开一个子进程来处理请求。

    socket_connect()是链接一个socket去。是客户端使用的。

    c语言的介绍:connect, send, recv都是同步阻塞工作模式。

     那么,可以得出结论,socket_connect()也是阻塞性的。

    php中使用协程:

    http://www.laruence.com/2015/05/28/3038.html

    socket_recv和socket_read($msgsock, 2048, PHP_NORMAL_READ)

    有什么区别呢?

    stream_select()

    接受一个socket流,可以多个,一个数组形式。

    等待这些流改变了状态。改变了状态,则会返回大于0的一个值



    <?php
    /* Prepare the read array */
    $read   = array($stream1, $stream2);//创建的两个socket
    $write  = NULL;
    $except = NULL;
    if (false === ($num_changed_streams = stream_select($read, $write, $except, 0))) {
        /* Error handling */
    } elseif ($num_changed_streams > 0) {
        /* At least on one of the streams something interesting happened */
    }
    ?>


    要使用引用传递,值会被修改。

    php多路复用参考资料:http://blog.csdn.net/phphot/article/details/2020269

    总结


    如果没有安装socket扩展,则使用如下相关函数:stream_socket_client、fread()、fwrite()、stream_select()、fclose()

    如果安装了sokcet扩展,则可以替换掉扩展的函数:

    stream_socket_client等价于socket_create()

    socket_select()等价于stream_select()

    socket_close()等价于fclose()

    socket_write()等价于fwrite()

    socket_read()等价于fread()

     

    stream_socket_client()实际上是在调用linux系统的 connect()函数。

    socket_select()、stream_select()都是在调用操作系统提供的select()函数。

     思考:stream和socket本质有什么区别呢?

     不知道,想着去去思考socket_accept和socket_listen()区别,也许就能找到答案了。

    我总把socket_accept和socket_listen()进行混淆了。

    socket_accept是开始接受客户端的链接,如果有客户端链接上来,这个函数会返回一个socket通道的句柄,这个句柄是专门与客户端单独的句柄。socket_listen是开始侦听这个socket通道,只是侦听,并不是接受客户端的连接请求。

  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/wangtao_20/p/4888455.html
Copyright © 2011-2022 走看看