php gatewaywoker,GatewayWorker使用总结

首先,看懂这个图,真的很重要的!不骗你!!!

1b8820a769d5ff468e9dcceb5bbf256e.png

我也不想说什么,累了,折腾一天了!直接上代码了!

前端代码

ws = new WebSocket("ws://127.0.0.1:8282");

// 服务端主动推送消息时会触发这里的onmessage

ws.onopen = function(){};

ws.onmessage = function(e){

console.log(e);

// json数据转换成js对象

var data = eval("("+e.data+")");

var type = data.type || '';

switch(type){

// Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定

case 'init':

var init=JSON.stringify({"type":'init','uid':10003});

ws.send(init);

break;

case 'online':

$.post("", {uid: data.uid}, function(data){

if(data.code==200){

console.log(data.msg)

}else{

console.log(data.msg)

}

}, 'json');

default :

console.log(e.data);

}

};

ws.onclose = function(e)

{

if(e.type=="close"){

$.post("", {uid: 10003}, function(data){

if(data.code==200){

console.log(data.msg)

}else{

console.log(data.msg)

}

}, 'json');

}

};

后端代码:

第一:需要修改一下协议

$gateway = new Gateway("WebSocket://0.0.0.0:8282")

第二:响应函数

/**

* 当客户端连接时触发

* 如果业务不需此回调可以删除onConnect

*

* @param int $client_id 连接id

*/

public static function onConnect($client_id)

{

global $num;

++$num;

echo "ConnectTotal:".$num."\r\n";

// 向当前client_id发送数据

//Gateway::sendToClient($client_id, "Hello $client_id\r\n");

// 向所有人发送

//Gateway::sendToAll("$client_id login\r\n");

Gateway::sendToClient($client_id, json_encode(array(

'type'      => 'init',

'client_id' => $client_id

)));

}

/**

* 当客户端发来消息时触发

*/

public static function onMessage($client_id, $message)

{

// 向所有人发送

//Gateway::sendToAll("$client_id said $message\r\n");

if(!$message){

return false;

}

$message_data=json_decode($message,true);

switch ($message_data['type']){

case 'init':

Gateway::bindUid($client_id,$message_data['uid']);

$sdata=[

'type'      => 'online',

'client_id' => $client_id,

'uid'=>$message_data['uid']

];

Gateway::sendToUid($message_data['uid'],json_encode($sdata));

break;

default:

return false;

}

}

/**

* 当用户断开连接时触发

* @param int $client_id 连接id

*/

public static function onClose($client_id)

{

$data=[

'type'      => 'close',

'client_id' => $client_id,

];

Gateway::sendToClient($client_id,json_encode($data));

}

第三:最重要的!MVC通讯使用gatewayclient

composer安装:

>composer require workerman/gatewayclient

通讯:

public function say(){

$data=[

'type'=>'say',

'data'=>123456

];

Gateway::$registerAddress = "127.0.0.1:1238";

Gateway::isUidOnline(10003);

Gateway::sendToUid(10003,json_encode($data));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值