消息发送
上一节我们知道了如何创建ws控制器,并通过客户端连接到server。
可以从示例代码里看到有简单的消息发送使用了。
...
/** @var \Swoole\WebSocket\Server $server */
$server->push($fd, 'hello, welcome! :)');
...
- 这里的server是swoole的
\Swoole\WebSocket\Server
对象 $fd
是与客户端的连接 ID,它表明了不同的客户端
使用 \Swoft::$server
除了使用 $server
来发送消息外,我们还可以使用swoft封装好的 \Swoft::$server
(等同于 \Swoft\App::$server
) 来发送消息.
例如:
\Swoft::$server->sendTo($fd, 'hi, 你好啊!');
\Swoft::$server
说明:
- 是
Swoft\WebSocket\Server\WebSocketServer
的实例对象 - 内部已经封装了各种发送消息的方法API
- 前台运行时,通过它发送消息能从控制台看到消息发送log
消息发送API
注意下面的方法都在类: Swoft\WebSocket\Server\WebSocketServer
发送给某个客户端
public function sendTo(int $receiver, string $data, int $sender = 0): int
参数说明:
$receiver
int
接收者的fd$data
string
要发送的消息数据$sender
int
发送者的fd。 可选的
示例:
\Swoft::$server->sendTo($fd, 'hi, 你好啊!');
发送给所有客户端
public function sendToAll(string $data, int $sender = 0): int
发送消息给所有客户端,相当于进行全员广播。使用分页方式发送,每 50 个一页,直到全部发送完毕
参数说明:
$data
string
要发送的消息数据$sender
int
发送者的fd。 可选的
示例:
\Swoft::$server->sendToAll('hi, 大家好啊!');
发送给指定的一些客户端
public function sendToSome(string $data, array $receivers = [], array $excepted = [], int $sender = 0): int
参数说明:
$data
string
要发送的消息数据$receivers
int[]
指定的接收者fd 列表$excepted
int[]
排除的接收者fd 列表$sender
int
发送者的fd。 可选的
方法说明:
- 当
$receivers
有数据时,将会忽略$excepted
。 此时就是将消息指定的发给这些接收者 - 当
$receivers
为空时- 若
$excepted
有值,将会给除了这些人之外的发送消息 - 若
$excepted
为空,相当于给所有人发消息
- 若
示例:
\Swoft::$server->sendToSome('hi, 你们好啊!', [$fd0, $fd1, ...]);
广播消息
broadcast(string $data, array $receivers = [], array $excepted = [], int $sender = 0): int
参数跟 sendToSome
一样
会自动根据参数判断调用上面的(sendTo
, sendToAll
, sendToSome
)中的一个方法