gpt4 book ai didi

php - Socket.io、PHP、Node 和 Redis 聊天室

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

我根据许多使用 PHP、socket.io、redis 和 Node 的教程创建了一个基本的聊天室。我创建了一个 .js 作为服务器来创建网络套接字以允许浏览器获取广播并自动更新。我的问题是如何修改我必须允许有多个房间/ channel 的内容?在本教程中,它将服务器设置为订阅“测试 channel ”,但我需要用户根据他们应该与谁见面来订阅不同的房间。非常感谢任何建议、代码提示或指向其他教程。

Node 运行的我的 .js 服务器:

var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();

redis.subscribe('test-channel');

redis.on('message',function(channel, message){
message = JSON.parse(message);
io.emit(channel + ':' + message.event_type, message.data);
});

server.listen(3000);

我的 php 文件脚本,现在只显示消息:

<script>
var socket = io('http://localhost:3000');
socket.on('test-channel:CampaignJobCompleted', function (data) {
console.log(data);
$( "#messages" ).append( "<p>"+data.message+"</p>" );
});
</script>

广播数据的 Laravel Controller :

$data = [
'event_type' => 'CampaignJobCompleted',
'data' => [
'campaign_name' => 'Sample Campaign',
'message' => 'I am sending a message'
]
];

\LRedis::publish('test-channel',json_encode($data));

当用户要求与另一个人见面时,房间/ channel 是预先确定的,所以我想在他们进入房间之前输入 channel 名称。

感谢任何人可以提供的帮助。

最佳答案

我想你想为特定用户创建不同的聊天室,比如 io.in('chatroom').emit(data) ?如果是这样,您需要首先获取用户 ID,即套接字 ID,并将该 ID 插入特定的聊天室,您可以添加用户 ID 并通过 javascript slice 函数删除该 ID 希望这会有所帮助?主题是在某些事件上你想收集用户信息,如 id 并将所有用户 id 保存在空数组中,然后在任何事件上生成 id 并让他们进入那个命名的聊天室......

关于php - Socket.io、PHP、Node 和 Redis 聊天室,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35725021/

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