按照文档分离mvc层写逻辑出现stream_socket_sendto(): Զ�����ǿ�ȹر��һ�����е���ӡ�

wubojing

在调用 Gateway::bindUid()的时候一直报这个错 刚开始有时候还可以通过,现在都不行了,转码也解决不了这个乱码的问题 ,不知道怎么定位这个bug,有遇到过这个坑的兄dei麻烦帮帮忙 ,两天都没解决掉 很烦
[attach]1017[/attach]

阅读 4667
5个回答

maq

你在哪里看到的这个乱码报错信息?浏览器里还是命令行窗口?

  • wubojing 2018-04-24

    浏览器,从event把client_id传到浏览器,再从浏览器通过ajax请求mvc的控制器,通过F12的network审查视图

  • maq 2018-04-25

    ajax 请求的 PHP 程序是在 web 容器里执行的,而 Gateway::bindUid() 里面是异步的 socket 通信,应该在 CLI 里执行才对。所以你这种用法恐怕是有问题的。

  • SimplerWorker 2018-05-18

    @3346: 我的代码如下,帮忙看看是什么问题? thinkPHP5 主动推送失败,也是这个问题,看下一条评论,我把代码和截图发在下面,多谢!

SimplerWorker
namespace app\worker\controller;
use \GatewayWorker\Lib\Gateway;
use think\Db;
use think\Controller;

class Index extends Controller{
    public function initUser(){
        $uid = input('post.uid');
        $client_id = input('post.client_id');
//        $uid = $uid ? $uid : 1;
//        $client_id = $client_id ? $client_id : "7f00000108fc00000006";
        Gateway::$registerAddress = '0.0.0.0:1236';
        Gateway::bindUid($client_id, $uid);   // 执行到这里就报错了
        Gateway::joinGroup($client_id, $uid);
        dump($uid);
        dump($client_id);
    }
    public function doSomeThing(){
        $arr = Db::query("select * from sw_user");
        $json = json_encode($arr,true);
        $uid = input('post.uid');
        dump($json);
        if(!is_array($json)){
//            Gateway::sendToAll($json);
//           Gateway::sendToClient($client_id,$json);
            Gateway::sendToUid($uid,$json);
            Gateway::sendToGroup($uid,$json);
        }
    }
}
  • 暂无评论
walkor

看下gatewayClient版本和gateway版本是否一致,不一致无法通讯

  • SimplerWorker 2018-05-18

    在thinkPHP5中使用composer安装的workerman和gatewayworker,gatewayworker是3.0.8,gatewayclient中没找到版本号,不过我从GitHub下载的gatewayclient3.0.8对比,代码没什么差别!

SimplerWorker

我把问题具体描述下, thinkPHP5 使用composer安装了workerman、workerman-for-win、gatewayworker、gatewayworker-for-win,然后网页和gateway正常建立webSocket连接,根据gatewayworker文档,网页给thinkPHP5异步发送init请求时,出现了如下问题:

Windows开机后首次执行 php register.php gateway.php businessworker.php , 多个网页之间能正常通讯(通过文档的集成MVC的流程)
当我关闭 cmd , 再次执行 php register.php gateway.php businessworker.php 时,多个网页重新刷新网页,执行到 Gateway::bindUid($client_id, $uid); 这里就报错了,报错跟楼主的一样
遇到这问题,每次我都要重启电脑,才能正常,求解、

( 我的代码)

namespace app\worker\controller;
use \GatewayWorker\Lib\Gateway;
use think\Db;
use think\Controller;

class Index extends Controller{
public function initUser(){
$uid = input('post.uid');
$client_id = input('post.client_id');
// $uid = $uid ? $uid : 1;
// $client_id = $client_id ? $client_id : "7f00000108fc00000006";
Gateway::$registerAddress = '127.0.0.1:1236';
Gateway::bindUid($client_id, $uid); // 执行到这里就报错了
Gateway::joinGroup($client_id, $uid);
dump($uid);
dump($client_id);
}
public function doSomeThing(){
$arr = Db::query("select * from sw_user");
$json = json_encode($arr,true);
$uid = input('post.uid');
dump($json);
if(!is_array($json)){
// Gateway::sendToAll($json);
// Gateway::sendToClient($client_id,$json);
Gateway::sendToUid($uid,$json);
Gateway::sendToGroup($uid,$json);
}
}
}

  • walkor 2018-05-18

    把workerman-for-win 和 gatewayworker-for-win都删掉,这两个项目是过时的项目。新版本的workerman和gatewayworker是支持windows系统的。

  • SimplerWorker 2018-05-25

    多谢

  • stop 2018-06-08

    @3963:请问你的问题解决了吗?我也遇到了同样的问题也找不到原因

bianchao1

我遇到这个问题,是windows系统,register正常启动后ctrl+c关闭了,再启动register时,thinkPHP框架内的gatewayclient就无法链接register了,这时候重启一下Apache,就又可以链接register的端口了。感觉还是windows系统或者是Apache(我用的PHPstudy)的问题,希望遇到这个问题的人,试一下方法是不是有效,也希望walkor查找下问题原因。
我用的最新的gatewayworker(win&linux)

  • aacsok 2018-12-04

    我现在情况跟你一样,请问解决了吗