只获取客户端的第一条数据.因为在客户端刚打开的时候,第一条数据设置了名字发送给服务器的.我想把这个名字广播出去.
我这样做,但我觉得代码质量不高,不可靠.不知道在什么地方有类似的demo或者思路.
$ws_worker->onConnect = function($connection)use($ws_worker)
{
$connection->onMessage = function($connection,$data)use($ws_worker)
{
//客户端心跳每5秒的字符串是/ff00,第一次收到客户端的消息,认为此消息为客户端发来的用户名,设置$connection->userName
//判断该消息不是心跳消息,且是第一次连接没有$connection->userName内容.则此时为第一包用户名消息.
if($data!='/ff00'&&empty($connection->userName)){
$connection->userName=$data;
foreach($ws_worker->connections as $connection){
$connection->send($data);
}
}else{
//其他消息的业务代码.
}
};
};
在onMessage回调中获取数据。
如果只想获取第一条数据,可以在onMessage中得到数据后直接关闭客户端连接。
好暴力啊.我是客户端做了心跳.
客户端输入名字点击确定以后建立websocket连接,此时的名字是第一个有用的数据,需要广播给所有其他进程中的客户端.
随后心跳到服务器的内容服务器不广播.但在客户端心跳周期中(我设置的是5sec),还有一些该客户端发来的聊天内容,需要广播给进程中的其他客户端.
没有思路,想了好久了.
我觉得这个思路可以。
再完善一点就是每个请求利用json,加个type字段,
{"type":"set_name","name":"xxxx"}
{"type":"ping"}
我看workerman有些例子就是这么写的