gpt4 book ai didi

javascript - Yiiframework 消息弹出

转载 作者:行者123 更新时间:2023-11-30 05:42:51 25 4
gpt4 key购买 nike

他在那里!

如果我有一个问题与我目前正在处理的应用程序中遇到的两个不同问题有关。

问题 1:- 有一个消息系统。用户可以互相发送消息。当用户收到一条新消息并且不在收件箱页面上时,我希望实时弹出。

问题 2:- 我想创建一个基本的成就系统,其中一个成就可以(例如)是:“收到消息。”

现在我认为两种功能都可以通过相同的方式实现。你们中有人对这种实时通信有任何经验吗?我真的不知道从哪里开始。如果它不是很重,我真的很喜欢它。

非常感谢。

最佳答案

这是一个您可以用于长轮询的样板文件(使用 jQuery 和 Yii):

服务器端:

class MessagesController extends CController {

public function actionPoll( $sincePk, $userPk ) {
while (true) {
$messages = Message::model()->findAll([
'condition' => '`t`.`userId` = :userPk AND `t`.`id` > :sincePk',
'order' => '`t`.`id` ASC',
'params' => [ ':userPk' => (int)$userPk, ':sincePk' => (int)$sincePk ],
]);

if ($messages) {
header('Content-Type: application/json; charset=utf-8');

echo json_encode(array_map(function($message){
return array(
'pk' => $message->primaryKey,
'from' => $message->from,
'text' => $message->text,
/* and whatever more information you want to send */
);
}, $messages));
}

sleep(1);
}
}

}

客户端:

<?php
$userPk = 1;
$lastMessage = Messages::model()->findByAttributes([ 'userId' => $userId ], [ 'order' => 'id ASC' ]);
$lastPk = $lastMessage ? $lastMessage->primaryKey : 0;
?>

var poll = function( sincePk ) {
$.get('/messages/poll?sincePk='+sincePk+'&userPk=<?=$userPk?>').then(function(data) {
// the request ended, parse messages and poll again
for (var i = 0;i < data.length;i++)
alert(data[i].from+': '+data[i].text);

poll(data ? data[i].pk : sincePk);
}, function(){
// a HTTP error occurred (probable a timeout), just repoll
poll(sincePk);
});
}

poll(<?=$lastPk?>);

请记住实现某种身份验证以避免用户阅读彼此的消息。

关于javascript - Yiiframework 消息弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com