workerman简单实现步骤:
将下载的Gateway版本放在vendor里面,
再打开start_for_win.bat之后,在Events.php文件中OnConnect()中,sendToClient()函数是 向客户端client_id发送$send_data数据。如果client_id对应的客户端不存在或者不在线则自动丢弃发送数据。
public static function onConnect($client_id)
{
// 向当前client_id发送数据
// Gateway::sendToClient($client_id, "Hello $client_id\r\n");
// 向所有人发送
// Gateway::sendToAll("$client_id login\r\n");
//将消息发送给指定的聊天对象 => 当前client_id
Gateway::sendToClient($client_id,json_encode([
'type'=>'init',
'client_id'=>$client_id,
]));
}
在聊天页面的js里面:
console.log之后会发现
Client_id是workerman系统自动生成的聊天者的id,这就代表建立最基本的通信成功
Js在判断到收到message之后,用switch判断message的type类型,达到分辨信息类型的步骤
ws.send()作用是将数据发送给socket服务器(在Events.php里面接收)
bindUid()是将client_id与uid绑定,以便通过Gateway::sendToUid($uid)发送数据,
通过Gateway::isUidOnline($uid)用户是否在线。uid解释:这里uid泛指用户id或者设备id,用来唯一确定一个客户端用户或者设备
点击发送按钮处理逻辑:
Message结合内容(fromid和toid,data表示用户发送的信息,type代表发送信息的类型等信息)
当返回类型是say,表示接收到了发送的type类型为say类型的信息,
sendToUid()表示:向uid绑定的所有在线client_id发送数据。
isUidOnline()表示:判断$uid是否在线,此方法需要配合Gateway::bindUid($client_uid, $uid)使用 。
至此,一个简单的发送文字的简单通信步骤就完成了~
参考网易云课堂视频链接:https://study.163.com/course/courseMain.htm?courseId=1005015012