效果如图:
大致思路:
- 完成 html 静态页面,点击发送按钮可以使用 JavaScript 在页面上添加一条新的消息
- php 后端建立 webSocket 类,完成 webSocket 服务,监听端口
- 页面中建立 webSocket 和 php 后端接口连接
- 发送消息的时候,调用 JavaScript 中 webSocket 的 send 方法,发送数据到后端
- 后端监听到消息时,返回给所有客户端信息
- 客户端拿到后端返回的消息在页面上显示
后端建立 WebSocket 时,onMessage 是一个必要的回调方法。它在监听到页面发送消息的时候调用,可以在这个方法里返回给页面数据,其中 connections 是连接迭代器,可以遍历所有的连接,可以用这个属性实现一对多的返回客户端数据:
/**
* 接收到客户端发送的信息的回调方法
* @param $serv
* @param $frame
*/
public function onMessage($serv, $frame)
{
echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
// 遍历所有连接的客户端
foreach($serv->connections as $fd)
{
$fd == $frame->fd ? '0' : '1';
$serv->push($fd, $this->param($frame->data,$fd,$frame->fd));
}
// 向发送消息的客户端推送数据
// $serv->push($frame->fd, $frame->data);
}
后端遍历所有连接时,判断当前连接和发起请求的连接是否为同一个,如果是同一个,则新的消息显示在右边。否则,反之。
github地址:https://github.com/ljhe/Chart