在調(diào)用 Gateway::bindUid()的時(shí)候一直報(bào)這個(gè)錯(cuò) 剛開(kāi)始有時(shí)候還可以通過(guò),現(xiàn)在都不行了,轉(zhuǎn)碼也解決不了這個(gè)亂碼的問(wèn)題 ,不知道怎么定位這個(gè)bug,有遇到過(guò)這個(gè)坑的兄dei麻煩幫幫忙 ,兩天都沒(méi)解決掉 很煩
[attach]1017[/attach]
你在哪里看到的這個(gè)亂碼報(bào)錯(cuò)信息?瀏覽器里還是命令行窗口?
瀏覽器,從event把client_id傳到瀏覽器,再?gòu)臑g覽器通過(guò)ajax請(qǐng)求mvc的控制器,通過(guò)F12的network審查視圖
ajax 請(qǐng)求的 PHP 程序是在 web 容器里執(zhí)行的,而 Gateway::bindUid() 里面是異步的 socket 通信,應(yīng)該在 CLI 里執(zhí)行才對(duì)。所以你這種用法恐怕是有問(wèn)題的。
@3346: 我的代碼如下,幫忙看看是什么問(wèn)題? thinkPHP5 主動(dòng)推送失敗,也是這個(gè)問(wèn)題,看下一條評(píng)論,我把代碼和截圖發(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í)行到這里就報(bào)錯(cuò)了
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版本是否一致,不一致無(wú)法通訊
在thinkPHP5中使用composer安裝的workerman和gatewayworker,gatewayworker是3.0.8,gatewayclient中沒(méi)找到版本號(hào),不過(guò)我從GitHub下載的gatewayclient3.0.8對(duì)比,代碼沒(méi)什么差別!
我把問(wèn)題具體描述下, thinkPHP5 使用composer安裝了workerman、workerman-for-win、gatewayworker、gatewayworker-for-win,然后網(wǎng)頁(yè)和gateway正常建立webSocket連接,根據(jù)gatewayworker文檔,網(wǎng)頁(yè)給thinkPHP5異步發(fā)送init請(qǐng)求時(shí),出現(xiàn)了如下問(wèn)題:
Windows開(kāi)機(jī)后首次執(zhí)行 php register.php gateway.php businessworker.php , 多個(gè)網(wǎng)頁(yè)之間能正常通訊(通過(guò)文檔的集成MVC的流程)
當(dāng)我關(guān)閉 cmd , 再次執(zhí)行 php register.php gateway.php businessworker.php 時(shí),多個(gè)網(wǎng)頁(yè)重新刷新網(wǎng)頁(yè),執(zhí)行到 Gateway::bindUid($client_id, $uid); 這里就報(bào)錯(cuò)了,報(bào)錯(cuò)跟樓主的一樣
遇到這問(wèn)題,每次我都要重啟電腦,才能正常,求解、
( 我的代碼)
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í)行到這里就報(bào)錯(cuò)了
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都刪掉,這兩個(gè)項(xiàng)目是過(guò)時(shí)的項(xiàng)目。新版本的workerman和gatewayworker是支持windows系統(tǒng)的。
我遇到這個(gè)問(wèn)題,是windows系統(tǒng),register正常啟動(dòng)后ctrl+c關(guān)閉了,再啟動(dòng)register時(shí),thinkPHP框架內(nèi)的gatewayclient就無(wú)法鏈接register了,這時(shí)候重啟一下Apache,就又可以鏈接register的端口了。感覺(jué)還是windows系統(tǒng)或者是Apache(我用的PHPstudy)的問(wèn)題,希望遇到這個(gè)問(wèn)題的人,試一下方法是不是有效,也希望walkor查找下問(wèn)題原因。
我用的最新的gatewayworker(win&linux)