在调用 Gateway::bindUid()的时候一直报这个错 刚开始有时候还可以通过,现在都不行了,转码也解决不了这个乱码的问题 ,不知道怎么定位这个bug,有遇到过这个坑的兄dei麻烦帮帮忙 ,两天都没解决掉 很烦 [attach]1017[/attach]
你在哪里看到的这个乱码报错信息?浏览器里还是命令行窗口?
浏览器,从event把client_id传到浏览器,再从浏览器通过ajax请求mvc的控制器,通过F12的network审查视图
ajax 请求的 PHP 程序是在 web 容器里执行的,而 Gateway::bindUid() 里面是异步的 socket 通信,应该在 CLI 里执行才对。所以你这种用法恐怕是有问题的。
@3346: 我的代码如下,帮忙看看是什么问题? thinkPHP5 主动推送失败,也是这个问题,看下一条评论,我把代码和截图发在下面,多谢!
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); } } }
看下gatewayClient版本和gateway版本是否一致,不一致无法通讯
在thinkPHP5中使用composer安装的workerman和gatewayworker,gatewayworker是3.0.8,gatewayclient中没找到版本号,不过我从GitHub下载的gatewayclient3.0.8对比,代码没什么差别!
我把问题具体描述下, 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); } } }
把workerman-for-win 和 gatewayworker-for-win都删掉,这两个项目是过时的项目。新版本的workerman和gatewayworker是支持windows系统的。
多谢
@3963:请问你的问题解决了吗?我也遇到了同样的问题也找不到原因
我遇到这个问题,是windows系统,register正常启动后ctrl+c关闭了,再启动register时,thinkPHP框架内的gatewayclient就无法链接register了,这时候重启一下Apache,就又可以链接register的端口了。感觉还是windows系统或者是Apache(我用的PHPstudy)的问题,希望遇到这个问题的人,试一下方法是不是有效,也希望walkor查找下问题原因。 我用的最新的gatewayworker(win&linux)
我现在情况跟你一样,请问解决了吗
你在哪里看到的这个乱码报错信息?浏览器里还是命令行窗口?
浏览器,从event把client_id传到浏览器,再从浏览器通过ajax请求mvc的控制器,通过F12的network审查视图
ajax 请求的 PHP 程序是在 web 容器里执行的,而 Gateway::bindUid() 里面是异步的 socket 通信,应该在 CLI 里执行才对。所以你这种用法恐怕是有问题的。
@3346: 我的代码如下,帮忙看看是什么问题? thinkPHP5 主动推送失败,也是这个问题,看下一条评论,我把代码和截图发在下面,多谢!
看下gatewayClient版本和gateway版本是否一致,不一致无法通讯
在thinkPHP5中使用composer安装的workerman和gatewayworker,gatewayworker是3.0.8,gatewayclient中没找到版本号,不过我从GitHub下载的gatewayclient3.0.8对比,代码没什么差别!
我把问题具体描述下, 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);
}
}
}
把workerman-for-win 和 gatewayworker-for-win都删掉,这两个项目是过时的项目。新版本的workerman和gatewayworker是支持windows系统的。
多谢
@3963:请问你的问题解决了吗?我也遇到了同样的问题也找不到原因
我遇到这个问题,是windows系统,register正常启动后ctrl+c关闭了,再启动register时,thinkPHP框架内的gatewayclient就无法链接register了,这时候重启一下Apache,就又可以链接register的端口了。感觉还是windows系统或者是Apache(我用的PHPstudy)的问题,希望遇到这个问题的人,试一下方法是不是有效,也希望walkor查找下问题原因。
我用的最新的gatewayworker(win&linux)
我现在情况跟你一样,请问解决了吗