在調(diào)用 Gateway::bindUid()的時候一直報這個錯 剛開始有時候還可以通過,現(xiàn)在都不行了,轉(zhuǎn)碼也解決不了這個亂碼的問題 ,不知道怎么定位這個bug,有遇到過這個坑的兄dei麻煩幫幫忙 ,兩天都沒解決掉 很煩
[attach]1017[/attach]
你在哪里看到的這個亂碼報錯信息?瀏覽器里還是命令行窗口?
ajax 請求的 PHP 程序是在 web 容器里執(zhí)行的,而 Gateway::bindUid() 里面是異步的 socket 通信,應該在 CLI 里執(zhí)行才對。所以你這種用法恐怕是有問題的。
@3346: 我的代碼如下,幫忙看看是什么問題? thinkPHP5 主動推送失敗,也是這個問題,看下一條評論,我把代碼和截圖發(fā)在下面,多謝!
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); // 執(zhí)行到這里就報錯了
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,然后網(wǎng)頁和gateway正常建立webSocket連接,根據(jù)gatewayworker文檔,網(wǎng)頁給thinkPHP5異步發(fā)送init請求時,出現(xiàn)了如下問題:
Windows開機后首次執(zhí)行 php register.php gateway.php businessworker.php , 多個網(wǎng)頁之間能正常通訊(通過文檔的集成MVC的流程)
當我關閉 cmd , 再次執(zhí)行 php register.php gateway.php businessworker.php 時,多個網(wǎng)頁重新刷新網(wǎng)頁,執(zhí)行到 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); // 執(zhí)行到這里就報錯了
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系統(tǒng)的。
我遇到這個問題,是windows系統(tǒng),register正常啟動后ctrl+c關閉了,再啟動register時,thinkPHP框架內(nèi)的gatewayclient就無法鏈接register了,這時候重啟一下Apache,就又可以鏈接register的端口了。感覺還是windows系統(tǒng)或者是Apache(我用的PHPstudy)的問題,希望遇到這個問題的人,試一下方法是不是有效,也希望walkor查找下問題原因。
我用的最新的gatewayworker(win&linux)