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)服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?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();

  客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<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>

  

 

posted @   fsl  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
历史上的今天:
2011-12-31 phpcms--权限问题,父栏目权限应用到子栏目不管用
点击右上角即可分享
微信分享提示