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通道,只是侦听,并不是接受客户端的连接请求。

  • 相关阅读:
    easyui datagrid client搜索、分页、排序
    tomcat安全配置之禁用Directory Listing
    关于一哥们离职
    <微软的软件测试之道>读书笔记3
    hdu 1685 Booksort (IDA*)
    百度——LBS.云 v2.0——创建自己的地理云数据
    Sublime Text 常用快捷键
    第二节,CCSpriteBatchNode CCSpriteFrameCache
    [置顶] hdu 1890 伸展树区间翻转
    @余凯_西二旗民工 【SVM之菜鸟实现】—5步SVM
  • 原文地址:https://www.cnblogs.com/wangtao_20/p/4888455.html
Copyright © 2011-2022 走看看