请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用swoole_client连接websocket成功,但是不能进行数据传输。

//1 使用php 异步连接 websocket 

//2 connectiong 方法执行了,但是send没有发送数据出去

//3  我使用js  websocket可以正常发送和接收数据

 $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);


            //注册连接成功回调

            $client->on("connect", function($cli) {

                            error_log("connecting success.............");

                            $cli->send("hello world\n");

                            }); 


            //注册数据接收回调

            $client->on("receive", function($cli, $data){

                            error_log("receive message is ".$data);

                            echo "Received: ".$data."\n";

                            }); 


            //注册连接失败回调

            $client->on("error", function($cli){

                            error_log("connectiong error ...........");

                            echo "Connect failed\n";

                            }); 


            //注册连接关闭回调

            $client->on("close", function($cli){

                            error_log("connection is closed.");

                            echo "Connection close\n";

                            }); 


            //发起连接

            $client->connect('192.168.2.185', 80, 3); 


正在回答 回答被采纳积分+3

2回答

提问者 慕仔7564882 2018-08-24 08:11:06

没有提示

0 回复 有任何疑惑可以回复我~
singwa 2018-08-24 00:15:46

您好。看看swoole是否有错误日志提示什么的?

0 回复 有任何疑惑可以回复我~
  • 老师,我也遇到同样问题,js  websocket可以正常发送和接收数据,swoole\client提示的是这个错误:Swoole\Client::recv(): recv() failed. Error: Resource temporarily unavailable [11] 。查资料看收服务端没有返回消息超时报这个错的,但在服务端看并没有打印收到的消息即服务端并没有收到消息。但打印client->send返回的内容正常,并不是false;
    回复 有任何疑惑可以回复我~ 2018-11-30 16:37:47
  • server:
    class WebsocketTest {
        public $server;
        public function __construct() {
            $this->server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
            $this->server->on('open', function (swoole_websocket_server $server, $request) {
                echo "server: handshake success with fd{$request->fd}\n";
            });
            $this->server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
                echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
                $server->push($frame->fd, "this is server");
            });
            $this->server->on('close', function ($ser, $fd) {
                echo "client {$fd} closed\n";
            });
            $this->server->on('request', function ($request, $response) {
                // 接收http请求从get获取message参数的值,给用户推送
                // $this->server->connections 遍历所有websocket连接用户的fd,给所有用户推送
                foreach ($this->server->connections as $fd) {
                    $this->server->push($fd, $request->get['message']);
                }
            });
            $this->server->start();
        }
    }
    new WebsocketTest();
    回复 有任何疑惑可以回复我~ 2018-11-30 16:40:53
  • ------------------------------------------
    client:
    $client = new swoole_client(SWOOLE_SOCK_TCP);
    //连接到服务器
    if (!$client->connect('127.0.0.1', 9501, 0.5)) {
        die("connect failed.");
    }
    //向服务器发送数据
    if (!$client->send("hello world")) {
        die("send failed.");
    }
    //从服务器接收数据
    $data = $client->recv();
    if (!$data) {
        die("recv failed.");
    }
    echo $data;
    回复 有任何疑惑可以回复我~ 2018-11-30 16:41:07
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号