消息发送

上一节我们知道了如何创建ws控制器,并通过客户端连接到server。

可以从示例代码里看到有简单的消息发送使用了。

  1. ...
  2. /** @var \Swoole\WebSocket\Server $server */
  3. $server->push($fd, 'hello, welcome! :)');
  4. ...
  • 这里的server是swoole的 \Swoole\WebSocket\Server 对象
  • $fd 是与客户端的连接 ID,它表明了不同的客户端

使用 \Swoft::$server

除了使用 $server 来发送消息外,我们还可以使用swoft封装好的 \Swoft::$server(等同于 \Swoft\App::$server) 来发送消息.

例如:

  1. \Swoft::$server->sendTo($fd, 'hi, 你好啊!');

\Swoft::$server 说明:

  • Swoft\WebSocket\Server\WebSocketServer 的实例对象
  • 内部已经封装了各种发送消息的方法API
  • 前台运行时,通过它发送消息能从控制台看到消息发送log

消息发送API

注意下面的方法都在类: Swoft\WebSocket\Server\WebSocketServer

发送给某个客户端

  1. public function sendTo(int $receiver, string $data, int $sender = 0): int

参数说明:

  • $receiver int 接收者的fd
  • $data string 要发送的消息数据
  • $sender int 发送者的fd。 可选的

示例:

  1. \Swoft::$server->sendTo($fd, 'hi, 你好啊!');

发送给所有客户端

  1. public function sendToAll(string $data, int $sender = 0): int

发送消息给所有客户端,相当于进行全员广播。使用分页方式发送,每 50 个一页,直到全部发送完毕

参数说明:

  • $data string 要发送的消息数据
  • $sender int 发送者的fd。 可选的

示例:

  1. \Swoft::$server->sendToAll('hi, 大家好啊!');

发送给指定的一些客户端

  1. 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 为空,相当于给所有人发消息

示例:

  1. \Swoft::$server->sendToSome('hi, 你们好啊!', [$fd0, $fd1, ...]);

广播消息

  1. broadcast(string $data, array $receivers = [], array $excepted = [], int $sender = 0): int

参数跟 sendToSome 一样

会自动根据参数判断调用上面的(sendTo, sendToAll, sendToSome)中的一个方法