gpt4 book ai didi

php - 如何使用带有 laravel 的 Redis 和 Nodejs 广播消息

转载 作者:可可西里 更新时间:2023-11-01 10:58:03 24 4
gpt4 key购买 nike

我正在使用 Redis+laravel+nodejs 来广播消息。我的代码如下

在 Controller 中

function postReassignlead(Request $request){
$data = Input::get();
$leadId = $data['leadid'];
$assignedtoid = $data['assignedtoid'];
$assignedbyid = $data['assignedbyid'];

$message = "A lead :".$leadId," has been assigned to YOU by ".$assignedbyid."";

$redis = LRedis::connection();
$redis->publish('message', $message);

}

在我的 server.js 中

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');

server.listen(8890);

io.on('connection', function (socket) {

console.log("new client connected");
var redisClient = redis.createClient();
redisClient.subscribe('message');

redisClient.on("message", function(channel, message) {
console.log("mew message in queue "+ message + "channel");
socket.emit(channel, message);
//res.flush();
});

socket.on('disconnect', function() {
redisClient.quit();
});

});

然后在home.php页面

    <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>

<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<div id="messages"></div>
</div>
</div>
</div>
<script>
var socket = io.connect('http://localhost:8890');
socket.on('message', function (data) {
$( "#messages" ).append( "<p>"+data+"</p>" );
});
</script>

这里消息正在向所有登录的用户广播,但我想将其更改为只有一个用户

我可以扩展到特定用户 id 的东西

喜欢

    $redis = LRedis::connection();
$redis->publish('message_1990', $message);

所以在我的 home.php 中

我可以有这样的代码

 <script>
var socket = io.connect('http://localhost:8890');
socket.on('message_1990', function (data) {
$( "#message_1990" ).append( "<p>"+data+"</p>" );
});
</script>

最佳答案

为我自己的项目做一些关于 Redis 的研究并遇到了你的问题..

据我了解,发布和订阅方法的第一个参数是用于通信的“ channel ”。因此,在您的情况下,您只需要在发送端和接收端将“message”更新为“message_1990”。

Redis - Laravel

这意味着您的 Laravel 应用会知道将消息发布到哪个 channel ,这可能并不总是很容易确定,或者该消息可能是团队广播消息。

为了灵 active ,您可以 pass the message in JSON form ,然后在客户端简单地解包以确定交付/显示。通过这种方式,消息将传递给每个人,客户可以决定如何处理它。

Pass PHP array to Javascript

所以在 Laravel Controller 中:

$message = "A lead :".$leadId," has been assigned to YOU by ".$assignedbyid."";

$redis = LRedis::connection();

// PHP array to convert to JSON, add other fields as necessary
$msgPacket = ["rx"=>"bsmith","msgtype"=>"leadGen","message"=>$message];

// send as a JSON data packet
$redis->publish('message', json_encode($msgPacket) );

在客户端unpackage the JSON data确定如何处理它:

<script>
socket.on('message', function (data) {
obj = JSON.parse(data);

// receive team and personal messages
if( (obj.msgtype == "leadGen") || (obj.rx == "bsmith") ) {
$( "#message" ).append( "<p>"+data+"</p>" );
}
// else ignore the message

});
</script>

这里我使用了 JSON.parse() 但它是 not always necessary并且数据也可以通过数据变量访问,如 data.msgtype

关于php - 如何使用带有 laravel 的 Redis 和 Nodejs 广播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195143/

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