国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

多個定時器 不同的客戶端長時間停留 數(shù)據(jù)混亂

雪曇花

定義了兩個定時器,根據(jù)來源的不同,發(fā)送不同的數(shù)據(jù),現(xiàn)在如果單獨訪問沒有問題,我在兩個瀏覽器,同時訪問兩個數(shù)據(jù),一個不動,另一個刷新幾次,這兩個端接收都是同一個數(shù)據(jù)了,

我想實現(xiàn)的是客戶端只有第一次訪問的時候,會發(fā)送數(shù)據(jù)過來,發(fā)送后,就一直是服務端定時推送數(shù)據(jù)給這個客戶端
[attach]2232[/attach]
?

3369 4 0
4個回答

six

你的邏輯有bug吧,$this->cmd和$this->params是所有定時器共享的,在onMessage里更改了$this->cmd和$this->params,所有定時器都影響了

  • 雪曇花 2019-07-04

    onMessage無法設置定時,這樣的話,怎么針對每個客戶端,獲得者兩個數(shù)據(jù)???

six

針對連接的對象是$connection啊,$connection->cmd = 'xxxx'; $connection->params = 'xxxx'; 。
?
還有,在onClose的時候要把對應連接的定時器也刪除,不然你的定時器數(shù)量是無限增長,假設有1萬個定時器每秒跑一次,你的業(yè)務基本就掛了。

  • 雪曇花 2019-07-04

    那定時器放到onworkerstart里的話,是不是可以就一個的?但是這樣的話,針對用戶跑的話,是不是又不對了

six

?一個定時器也可以啊。你可以設置一個定時器,然后
foreach($worker->connections as $connection){
? ? switch ($connection->cmd) {
? ? ? ? $connection->sned(...);
? ? }
}
遍歷所有連接 判斷$connection->cmd = 'xxxx'; $connection->params = 'xxxx'; 并生成數(shù)據(jù)發(fā)送

  • 雪曇花 2019-07-04

    之前是這樣做的,但是也是數(shù)據(jù)錯亂的,比如我不同瀏覽器開啟訪問不同的接口,如果刷新的話,返回成一樣的數(shù)據(jù)了

  • six 2019-07-04

    那應該是你業(yè)務邏輯的bug,針對每個連接設置cmd params不會亂。所有連接你都用$this->cmd來生成數(shù)據(jù)所有連接當然都一樣了。這很容易理解吧

  • 雪曇花 2019-07-04

    @1393:理解了,但是就是不知道如何解決這個,如何針對每個鏈接的cmd推送??!因為一個頁面打開,對方不刷新,這樣的話,就需要服務端針對這個鏈接一直推送數(shù)據(jù)了

  • six 2019-07-04

    上面示例代碼都給了...,你還不會

  • 雪曇花 2019-07-04

    @1393:最早就是這樣的,有問題,所以想問個思路,看看有什么好的辦法

雪曇花

[attach]2233[/attach]
之前就是這樣做的,就是這樣會有問題的

  • six 2019-07-04

    大哥,上面說過2遍了,$this->cmd是所有連接都共享的,用$connection->cmd來存儲每個連接的cmd

  • 雪曇花 2019-07-04

    @1393:強,謝謝

年代過于久遠,無法發(fā)表回答
??