• 消息发送
    • 使用 \server()
  • 消息发送API
    • 发送给某个客户端
    • 发送给指定的一些客户端
    • 广播消息
    • 发送给所有客户端
    • send

    消息发送

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

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

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

    使用 \server()

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

    例如:

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

    说明:

    • 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. \server()->sendTo($fd, 'hi, 你好啊!');

    发送给指定的一些客户端

    1. public function sendToSome(string $data, array $receivers = [], array $excluded = [], int $sender = 0, int $pageSize = 50): int

    参数说明:

    • $data string 要发送的消息数据
    • $receivers int[] 指定的接收者fd 列表
    • $excluded int[] 排除的接收者fd 列表
    • $sender int 发送者的fd。 可选的

    方法说明:

    • $receivers 有数据时,将会忽略 $excluded。 此时就是将消息指定的发给这些接收者
    • $receivers 为空时
      • $excluded 有值,将会给除了这些人之外的发送消息
      • $excluded 为空,相当于给所有人发消息

    示例:

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

    广播消息

    发送消息给除了 sender 自己外的所有人。使用分页方式发送,每 50 个一页,直到全部发送完毕

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

    发送给所有客户端

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

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

    参数说明:

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

    示例:

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

    send

    参数跟 sendToSome 一样

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