phpsocket使用
服务器环境OpenCloud
1,安装,使用php8.2
composer require workerman/phpsocket.io
2,安装宝塔方便编辑文件
url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec
3,放开服务器端口
1),宝塔端口
2)phpsocket 端口
4,如果需要域名支持,申请https证书 选择nginx的证书下载
5,phpsocket服务端和客户端代码
1)服务端
<?php
require_once __DIR__ . '/vendor/autoload.php';
//require_once __DIR__ . '/medoo_init.php';
use Workerman\Worker;
use Workerman\Timer;
use PHPSocketIO\SocketIO;
$context = array(
'ssl' => array(
'local_cert' => './ssl/feng.shuzizhengzhou.cn.pem',
'local_pk' => './ssl/feng.shuzizhengzhou.cn.key',
'verify_peer' => false,
)
);
//$io = new SocketIO(3120, $context);
$io = new SocketIO(3120);
// 当有客户端连接时
$io->on('connection', function($socket)use($io){
//echo $socket->conn->remoteAddress.PHP_EOL;
$socket->emit('connection','123456');
echo 123456;
// 定义chat message事件回调函数
$socket->on('chat message', function($msg)use($io){
echo $msg;
//$db=get_db();
//$data=$db->query("SELECT manage_ic,clear_ic from dz_espdevice where deviceid='$msg' ")->fetchAll(\PDO::FETCH_ASSOC );
$data=array("manage_ic"=>"34343434");
// 触发所有客户端定义的chat message from server事件
$io->emit('chat message from server', json_encode($data));
echo 'chat message from server';
$time_interval = 5;
Timer::add($time_interval, function()use($io){
$d2=array(array("manage_ic"=>"11111144444777".date('Y-m-d H:i:s',time()),"clear_ic"=>"0"));
$io->emit('chat message from server', json_encode($d2));
echo 'd2';
});
});
});
Worker::runAll();
客户端代码
<script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js'></script>
<script src="https://cdn.workerman.net/js/jquery.min.js"></script>
<script>
// 如果服务端不在本机,请把127.0.0.1改成服务端ip
var socket = io('https://feng.shuzizhengzhou.cn:3120', {
reconnection: true, // 是否启用重连
reconnectionAttempts: 5, // 重连尝试次数
reconnectionDelay: 3000, // 两次重连尝试之间的间隔时间
timeout :50000, // 连接超时时间(ms)
//forceNew:true, //设置每次使用新的连接客户端
reconnection: true, //设置断开重连
reconnectionDelayMax: 5000 // 最大重连间隔时间
});
// 连接成功后的回调
//socket.on('connect', () => {
//console.log('Connected to the server');
//});
// 连接断开后的回调
socket.on('disconnect', (reason) => {
console.log(`Disconnected from the server: ${reason}`);
});
// 连接失败后的回调
socket.on('connect_error', (error) => {
console.log(`Connection error: ${error}`);
});
// 连接重连后的回调
socket.on('reconnect', (attempt) => {
console.log(`Reconnected to the server after ${attempt} attempts`);
socket.emit('chat message', 'HN202405141');
socket.on('chat message from server', function(msg){
console.log('get message:' + msg + ' from server');
var ss= JSON.parse(msg)
console.log(typeof ss)
console.log( ss)
for(i=0;i<ss.length;i++){
console.log(ss[i].manage_ic)
if(ss[i].manage_ic.length>0){
//$("#list").append("<li>"+ss[i].manage_ic+"</li>")
$("#list").html("<li>"+ss[i].manage_ic+"</li>")
}
}
});
socket.emit('chat message', '2222222222');
});
// 连接重连失败后的回调
socket.on('reconnect_failed', () => {
console.log('Reconnection failed');
});
// 当连接服务端成功时触发connect默认事件
socket.on('connection', function(msg){
console.log('connect success:'+msg);
});
socket.emit('chat message', 'HN202405141');
socket.on('chat message from server', function(msg){
console.log('get message:' + msg + ' from server');
var ss= JSON.parse(msg)
console.log(typeof ss)
console.log( ss)
for(i=0;i<ss.length;i++){
console.log(ss[i].manage_ic)
if(ss[i].manage_ic.length>0){
//$("#list").append("<li>"+ss[i].manage_ic+"</li>")
$("#list").html("<li>"+ss[i].manage_ic+"</li>")
}
}
});
socket.emit('chat message', '2222222222');
</script>
<ul id="list">
</ul>

浙公网安备 33010602011771号