PHP多点环回

时间:2011-06-09 19:34:24

标签: php multicast multicastsocket

我正在尝试使用PHP实现简单的应用程序(不幸的是它必须在PHP中)和套接字。我有一个页面 - 让我们说multi.php和页面client.php的许多实例 我不想从没有文件或数据库的multi.php的一个实例向client.php的所有实例发送一些数据。

我尝试使用多播(使用多播地址从multi.php发送一些数据),但它不起作用。我无法与client.php的任何实例进行通信

提前谢谢

2 个答案:

答案 0 :(得分:4)

我目前正在使用PHP构建一个类,供私人使用。我将通过课程控制MediaRender设备。在mSearch方法中,您可以看到有关如何在PHP中实现多播效果的示例。

    // BUILD MESSAGE
    $msg  = 'M-SEARCH * HTTP/1.1' . "\r\n";
    $msg .= 'HOST: 239.255.255.250:1900' ."\r\n";
    $msg .= 'MAN: "'. $man .'"' . "\r\n";
    $msg .= 'MX: '. $mx ."\r\n";
    $msg .= 'ST:' . $st ."\r\n";
    $msg .= 'USER-AGENT: '. static::USER_AGENT ."\r\n";
    $msg .= '' ."\r\n";

    // MULTICAST MESSAGE
    $sock = socket_create( AF_INET, SOCK_DGRAM, 0 );
    $opt_ret = socket_set_option( $sock, 1, 6, TRUE );
    $send_ret = socket_sendto( $sock, $msg, strlen( $msg ), 0, '239.255.255.250', 1900);

    // SET TIMEOUT FOR RECIEVE
    socket_set_option( $sock, SOL_SOCKET, SO_RCVTIMEO, array( 'sec'=>$sockTimout, 'usec'=>'0' ) );

    // RECIEVE RESPONSE
    $response = array();
    do {
        $buf = null;
        @socket_recvfrom( $sock, $buf, 1024, MSG_WAITALL, $from, $port );
        if( !is_null($buf) )$response[] = $this->parseMSearchResponse( $buf );
    } while( !is_null($buf) );

    // CLOSE SOCKET
    socket_close( $sock );

https://github.com/artheus/PHP-UPnP/blob/development/phpupnp.class.php

答案 1 :(得分:0)

目前无法使用PHP进行多播。见http://bugs.php.net/bug.php?id=40510

您可以做的只是将相同的数据发送到所有套接字。您有一个服务器进程(multi.php)接受连接。此过程只是将相同的数据发送到所有打开的连接。这是你试图实现的目标吗?