2014-09-05 73 views
2

我试图用WebSocket(JS + PHP)建立一个网站,我想从发件人获取套接字。例如,如果客户端'A'向我的服务器发送消息,如何从客户端'A'获取套接字。 我在谷歌搜索,但我发现唯一的事情是,socket_select等待通信,并返回套接字数量的变化,但我无法得到套接字本身。如何识别发件人从websocket(PHP)

我的PHP代码如下

<?php 

$host = 'localhost'; //host 
$port = '9000'; //port 
$null = NULL; //null var 
//Create TCP/IP sream socket 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
//reuseable port 
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); 

//bind socket to specified host 
socket_bind($socket, 0, $port); 

//listen to port 
socket_listen($socket); 

//create & add listning socket to the list 
$sockets = array($socket); 
$users = array(); 

$validActions = array('init'); 

//start endless loop, so that our script doesn't stop 
while (true) { 
    //manage multipal connections 
    $changed = $sockets; 
    //returns the socket resources in $changed array 
    socket_select($changed, $null, $null, 0, 10); 

    //check for new socket 
    if (in_array($socket, $changed)) { 
     $socket_new = socket_accept($socket); //accept new socket 
     $sockets[] = $socket_new; //add socket to client array 

     $header = socket_read($socket_new, 1024); //read data sent by the socket 
     perform_handshaking($header, $socket_new, $host, $port); //perform websocket handshake 

     socket_getpeername($socket_new, $ip); //get ip address of connected socket 
     $response = mask(json_encode(array('type' => 'system', 'message' => $ip . ' connected'))); //prepare json data 
     send_message($response); //notify all users about new connection 
     //make room for new socket 
     $found_socket = array_search($socket, $changed); 
     unset($changed[$found_socket]); 
    } 

    $received_text = unmask($buf); //unmask data 
    $received_msg = json_decode($received_text); //json decode 


    //check for any incomming data 
    while (socket_recv($changed_socket, $buf, 1024, 0) >= 1) { 
     $received_text = unmask($buf); //unmask data 
     $tst_msg = json_decode($received_text); //json decode 
     // I HAVE TO GIVE $socket FROM THE CLIENT TO THE process() FUNCTION 
     process($received_msg); 
     ... MORE CODE .... 
    } 
} 
// close the listening socket 
socket_close($sock); 
+0

我发现我可以从与socket_accept连接的客户端套接字,但之后有没有办法从发件人后套接字? – X4V18 2014-09-05 13:33:03

回答

0

我认为我必须使用socket_select,我读过的文件,但我仍然没有找到合适的方法,从一个发送者获得插座消息...