微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以编程方式使用PHP调用WebSocket?

如何解决如何以编程方式使用PHP调用WebSocket?

| 我有一种情况,我需要根据另一个浏览器的输入来更新一个浏览器窗口。现在,我正在使用WebSockets,并且运行良好。 现在,我想使用PHP而不是浏览器将数据发送到WebSocket(因此,使用ws://代替ws://)。换句话说,我想使用PHP而不是JavaScript模拟WebSocket.send()调用我有以下似乎无效的代码(未调用onmessage):
if ( 
        function_exists(\'socket_create\') AND
        $sock = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP) AND
        $sock_data = socket_connect($sock,\"127.0.0.1\",12345)
    ) {  
        $msg = \"hello world\";
        $sock_data = socket_set_option($sock,SOL_SOCKET,SO_broADCAST,1); //Set 
        $sock_data = socket_write($sock,$msg,strlen($msg)); //Send data
        socket_close($sock); //Close socket
    } 

解决方法

这是完成的过程: 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);
,为了将数据发送到套接字,您需要使用fsockopen在指定端口打开与套接字的连接。如果连接成功,则只需使用fwrite 但是,您将把数据发送到WebSocket服务器。服务器会将您视为客户端,并且由于您未提供HTTP标头,因此期望成功进行身份验证-您的连接将被拒绝。 由于您没有说出谁应该接收您要发送的消息(所有用户或特定用户或完全不同的东西),而又不知道您的目标是什么-很难进一步解释您的目标应该做。,WebSockets不仅仅是将原始数据发送到TCP套接字,还有很多其他功能。 好的,首先,您正在使用UDP套接字,其中WebSockets使用TCP。 WebSockets是一个完整的通信协议,类似于HTTP,因此您需要遵循该协议,首先需要执行一个握手步骤,然后将头添加到所有通信中。这并不困难,但是我在这里不做详细介绍。 您可以从此处获得两个选择,或者在php中实现WebSockets协议,或者使用像这样的预构建库:http://code.google.com/p/phpwebsocket/ 我并不粗鲁,也不是刻薄,但是将来,请尝试快速进行Google搜索。谷歌搜索“ PHP WebSockets”后,找到了我链接的库。,最重要的部分是消息需要在现有套接字上发送,这意味着您不能调用socket_connect,fsockopen或PHP中的任何其他函数来尝试未经请求的客户端连接。这不是websocket的事情,而是网络编程中的基本概念。 在phpwebsocket上会是这样的:
$msg = \"hello world\";
$phpwebsocket->send($user->socket,$msg);
其中\'$ phpwebsocket \'是PHP WebSocket对象,$ user-> socket是已连接用户,该用户已与javascript WebSocket()优先连接,而send()是WebSocket对象中的一种将对消息进行正确编码的方法放入框架中(或应尽快将其放入)。 但是,如果出于任何原因要使用PHP的websockets连接到websocket服务器,则需要查看https://github.com/nicokaiser/php-websocket。如果您对当前的解决方案感到满意,则链接中的服务器将不会有任何重要性,但是该软件包还包含一个PHP Websocket客户端类,这是您所需要的。,结帐棘轮 您可以将诸如telnet之类的内容与popen / proc_open用于与套接字服务器进行通信。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。