定义了两个定时器,根据来源的不同,发送不同的数据,现在如果单独访问没有问题,我在两个浏览器,同时访问两个数据,一个不动,另一个刷新几次,这两个端接收都是同一个数据了,
我想实现的是客户端只有第一次访问的时候,会发送数据过来,发送后,就一直是服务端定时推送数据给这个客户端 [attach]2232[/attach]
你的逻辑有bug吧,$this->cmd和$this->params是所有定时器共享的,在onMessage里更改了$this->cmd和$this->params,所有定时器都影响了
onMessage无法设置定时,这样的话,怎么针对每个客户端,获得者两个数据啊?
针对连接的对象是$connection啊,$connection->cmd = 'xxxx'; $connection->params = 'xxxx'; 。 还有,在onClose的时候要把对应连接的定时器也删除,不然你的定时器数量是无限增长,假设有1万个定时器每秒跑一次,你的业务基本就挂了。
那定时器放到onworkerstart里的话,是不是可以就一个的?但是这样的话,针对用户跑的话,是不是又不对了
一个定时器也可以啊。你可以设置一个定时器,然后 foreach($worker->connections as $connection){ switch ($connection->cmd) { $connection->sned(...); } } 遍历所有连接 判断$connection->cmd = 'xxxx'; $connection->params = 'xxxx'; 并生成数据发送
之前是这样做的,但是也是数据错乱的,比如我不同浏览器开启访问不同的接口,如果刷新的话,返回成一样的数据了
那应该是你业务逻辑的bug,针对每个连接设置cmd params不会乱。所有连接你都用$this->cmd来生成数据所有连接当然都一样了。这很容易理解吧
@1393:理解了,但是就是不知道如何解决这个,如何针对每个链接的cmd推送啊!因为一个页面打开,对方不刷新,这样的话,就需要服务端针对这个链接一直推送数据了
上面示例代码都给了...,你还不会
@1393:最早就是这样的,有问题,所以想问个思路,看看有什么好的办法
[attach]2233[/attach] 之前就是这样做的,就是这样会有问题的
大哥,上面说过2遍了,$this->cmd是所有连接都共享的,用$connection->cmd来存储每个连接的cmd
@1393:强,谢谢
你的逻辑有bug吧,$this->cmd和$this->params是所有定时器共享的,在onMessage里更改了$this->cmd和$this->params,所有定时器都影响了
onMessage无法设置定时,这样的话,怎么针对每个客户端,获得者两个数据啊?
针对连接的对象是$connection啊,$connection->cmd = 'xxxx'; $connection->params = 'xxxx'; 。
还有,在onClose的时候要把对应连接的定时器也删除,不然你的定时器数量是无限增长,假设有1万个定时器每秒跑一次,你的业务基本就挂了。
那定时器放到onworkerstart里的话,是不是可以就一个的?但是这样的话,针对用户跑的话,是不是又不对了
一个定时器也可以啊。你可以设置一个定时器,然后
foreach($worker->connections as $connection){
switch ($connection->cmd) {
$connection->sned(...);
}
}
遍历所有连接 判断$connection->cmd = 'xxxx'; $connection->params = 'xxxx'; 并生成数据发送
之前是这样做的,但是也是数据错乱的,比如我不同浏览器开启访问不同的接口,如果刷新的话,返回成一样的数据了
那应该是你业务逻辑的bug,针对每个连接设置cmd params不会乱。所有连接你都用$this->cmd来生成数据所有连接当然都一样了。这很容易理解吧
@1393:理解了,但是就是不知道如何解决这个,如何针对每个链接的cmd推送啊!因为一个页面打开,对方不刷新,这样的话,就需要服务端针对这个链接一直推送数据了
上面示例代码都给了...,你还不会
@1393:最早就是这样的,有问题,所以想问个思路,看看有什么好的办法
[attach]2233[/attach]
之前就是这样做的,就是这样会有问题的
大哥,上面说过2遍了,$this->cmd是所有连接都共享的,用$connection->cmd来存储每个连接的cmd
@1393:强,谢谢