问题描述:
有一台服务器需要在本地启动一个 TCP 服务,并向外暴露一个端口。
该服务器会产生一些数据,提供给需要的客户端,客户端如果需要,就去主动连接该服务器。
需求如下:
- 当客户端连接成功后,才会向该客户端推送数据。
- 当客户端断开连接时,停止向该客户端推送数据。
- 允许多个客户端同时连接。
- 因为数据源是不间断的,理论上只要客户端的连接不主动断开,服务端的数据推送就不会主动停止。
服务端伪代码如下:
<?php
// 监听服务端 9503 端口
$server = new SwooleServer("0.0.0.0", 9503);
/**
* 监听连接进入事件
*/
$server->on("Connect", function ($server, $fd){
while(true){
// todo (获取数据)
// 向客户端推送数据
$server->send($fd, $data);
};
});
/**
* 监听数据接收事件
*/
$server->on("Receive", function ($server, $fd, $from_id, $data){
...
});
/**
* 监听连接关闭事件
*/
$server->on('Close', function ($server, $fd) {
...
});
// 启动 TCP 服务器
$server->start();
请问这个场景怎样处理更合适一些?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…