當前位置:首頁 » 編程語言 » php監聽

php監聽

發布時間: 2023-08-13 03:37:06

A. 訂單超時,活動過期解決方案:php監聽redis鍵重復觸發引發事件

訂單超時,活動過期解決方案:php監聽redis鍵重復觸發引發事件

Redis的2.8.0版本之後可用,鍵空間消息(Redis Keyspace Notifications),配合2.0.0版本之後的SUBSCRIBE 可以完成這個定時任務的操作了,定時的單位是秒。

1.我們先訂閱頻道稱為 redisChat

2.現在,我們重新開啟個redis客戶端,然後在同一個頻道redisChat發布消息,訂閱者可以接收到消息。

接收到的消息如下:

3.Key過期事件的Redis配置

需要這里配置notify-keyspace-events的參數為「EX」 .X代表了過期事件。notify-keyspace-events 「Ex」保存配置後,重啟Redis的服務,使配置生效。

PHP Redis實現訂閱鍵空間通知

redis實例化類:

redis.class.php

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

//遇到類別重復的報錯,所有叫Redis2

classRedis2  

{

    private$redis;

    publicfunction__construct($host= '127.0.0.1', $port= 6379)

    {

        $this->redis = newRedis();

        $this->redis->connect($host, $port);

    }

    publicfunctionsetex($key, $time, $val)

    {

        return$this->redis->setex($key, $time, $val);

    }

    publicfunctionset($key, $val)

    {

        return$this->redis->set($key, $val);

    }

    publicfunctionget($key)

    {

        return$this->redis->get($key);

    }

    publicfunctionexpire($key= null, $time= 0)

    {

        return$this->redis->expire($key, $time);

    }

    publicfunctionpsubscribe($patterns= array(), $callback)

    {

        $this->redis->psubscribe($patterns, $callback);

    }

    publicfunctionsetOption()

    {

        $this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);

    }

}

過期事件的訂閱:

psubscribe.php

1個

2

3

4

5

6

7

8

9

10

11

12

13

14

15

require_once'./Redis.class.php';

$redis= new\Redis2();

// 解決Redis客戶端訂閱時候超時情況

$redis->setOption();

$redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback');

// 回調函數,這里寫處理邏輯

functionkeyCallback($redis, $pattern, $chan, $msg)

{

    echo"Pattern: $pattern\n";

    echo"Channel: $chan\n";

    echo"Payl

    oad: $msg\n\n";

    //keyCallback為訂閱事件後的回調函數,這里寫業務處理邏輯,

    //比如前面提到的商品不支付自動撤單,這里就可以根據訂單id,來實現自動撤單

}

設置過期事件:

index.php

1個

2

3

4

require_once'./Redis.class.php';

$redis= new\Redis2();

$order_id= 123;

$redis->setex('order_id',10,$order_id);

先用命令行模式執行 psubscribe.php

在瀏覽器訪問 index.php

效果如下:

B. php 如何監聽伺服器埠

<?php
//設置運行時間:永不超時
set_time_limit (0);

//開啟緩沖
ob_implicit_flush ();

//IP地址
$ip = "127.0.0.1";

//監聽埠
$port = 80;

//創建socket
$socket = socket_create (AF_INET, SOCK_STREAM, 0);
if (!$socket){
die("創建socket失敗!").socket_strerror(socket_last_error());
}

//綁定socket
$bind = socket_bind ($socket, $ip, $port);
if (!$bind){
die("綁定.socket失敗!").socket_strerror ($bind);
}

//監聽socket
$listen = socket_listen ($socket);
if (!$listen){

die("監聽失敗!").socket_strerror ($listen);
}
echo "{$port}埠監聽成功!";
?>

C. PHP服務端監聽UDP通信方式

例子代碼:

<?php
$sock=socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);

$msg="Ping!";
$len=strlen($msg);

socket_sendto($sock,$msg,$len,0,'127.0.0.1',1223);
socket_close($sock);
?>

查看手冊中相關的函數就知道進一步應該怎麼編程

D. php中有沒有什麼方法可以實現實時監聽資料庫中的某張表的變化

最好的辦法是,在應用程序生命周期內,對於資料庫設置有事件鉤子,用於監聽程序對於資料庫的操作。這樣非常方便處理邏輯流程。

1 - 表的數據變化

表數據發生了變化,毫無疑問是寫操作,包括以下幾種情形:

  1. 新建條目 create

  2. 更新條目 update

  3. 刪除條目 delete

以上三種都是寫操作,會對表數據寫入。

Laravel Observer

結語

上面的方法要求讀者有laravel框架的使用基礎,對於構建中大型應用非常有利。

熱點內容
h6二代有哪些隱藏配置 發布:2025-02-06 04:11:09 瀏覽:606
c語言中的void是什麼意思 發布:2025-02-06 04:05:26 瀏覽:233
加密狗是啥 發布:2025-02-06 03:48:03 瀏覽:556
phpcopy文件 發布:2025-02-06 03:41:26 瀏覽:412
系統配置頁面怎麼設置 發布:2025-02-06 03:36:34 瀏覽:699
家庭電腦搭建流媒體伺服器 發布:2025-02-06 03:19:02 瀏覽:346
matlab稀疏矩陣存儲 發布:2025-02-06 03:07:54 瀏覽:840
國際服2b2t伺服器地址 發布:2025-02-06 03:06:28 瀏覽:392
c語言輸出b 發布:2025-02-06 03:06:27 瀏覽:33
普通火車wifi密碼多少 發布:2025-02-06 03:04:20 瀏覽:438