How to call a WebSocket programmatically (using PHP)?

前端 未结 5 2046
孤街浪徒
孤街浪徒 2021-02-04 18:46

I have a situation where I need to update one browser window based on input from the other. Right now I\'m using WebSockets and it\'s working great.

Now I want to sen

相关标签:
5条回答
  • 2021-02-04 19:15

    Checkout ratchet You can use something like telnet with popen/proc_open to communicate with the socket server.

    0 讨论(0)
  • 2021-02-04 19:19

    There is a lot more to WebSockets than just sending the raw data to a TCP socket.

    Ok, to start, you're using a UDP socket, where WebSockets use TCP. WebSockets is an entire protocol for communication, similar to HTTP, so you need to follow that protocol, there is a handshake step that you need to perform first and headers you need to add to all communication. It's not difficult, but I'm not going to go into detail here.

    You have two options from here, implement the WebSockets protocol in php, or use a pre-built library like this one: http://code.google.com/p/phpwebsocket/

    I'm not being rude, or mean, but in the future, try a quick Google search. That library I linked was found after googling "PHP WebSockets".

    0 讨论(0)
  • 2021-02-04 19:20

    The most important part is that the message needs to be sent on the existing socket, meaning you cant call socket_connect, fsockopen, or any other function within PHP that will attempt an unsolicited connection to the client. This isn't a websocket thing - that's a fundamental concept in network programing.

    On phpwebsocket it would be somethin like:

    $msg = "hello world";
    $phpwebsocket->send($user->socket, $msg);
    

    where '$phpwebsocket' is the PHP WebSocket object, $user->socket is a connected user who connected priory using with a javascript WebSocket(), and send() is a method within the WebSocket object that will properly encode the message into a frame (or should as it will soon be required).

    However, if for any reason you want to connect to the websocket server using websockets from PHP, you'll want to check out https://github.com/nicokaiser/php-websocket. The server in the link wont be of any importance if your happy with your current solution, but the package also contains a PHP Websocket client class which is what you would need.

    0 讨论(0)
  • 2021-02-04 19:21

    In order to send data to the socket, you need to use fsockopen to open the connection to the socket at specified port. If the connection is successfully, all you need to do is use fwrite

    However, you are going to be sending the data to the WebSocket server. The server will treat you as a client, and since you are not providing HTTP headers it expects for successful authentication - your connection will be refused.

    Since you didn't say who is supposed to receive the message you are trying to send (all users or a specific user or something entirely different), without knowing what your goal is - it's hard to explain any further what you should do.

    0 讨论(0)
  • 2021-02-04 19:29

    Here's how it's done:

    http://permalink.gmane.org/gmane.comp.lang.javascript.nodejs/18088

    $host = 'localhost';  //where is the websocket server
    $port = 9000;
    $local = "http://localhost/";  //url where this script run
    $data = 'hello world!';  //data to be send
    
    $head = "GET / HTTP/1.1"."\r\n".
                "Upgrade: WebSocket"."\r\n".
                "Connection: Upgrade"."\r\n".
                "Origin: $local"."\r\n".
                "Host: $host"."\r\n".
                "Content-Length: ".strlen($data)."\r\n"."\r\n";
    //WebSocket handshake
    $sock = fsockopen($host, $port, $errno, $errstr, 2);
    fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
    $headers = fread($sock, 2000);
    fwrite($sock, "\x00$data\xff" ) or die('error:'.$errno.':'.$errstr);
    $wsdata = fread($sock, 2000);  //receives the data included in the websocket package "\x00DATA\xff"
    fclose($sock);
    
    0 讨论(0)
提交回复
热议问题