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


Socket.io, PHP, Node, and Redis Chat rooms

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

节点运行的.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 控制器,用于广播数据:

$data = [
    'event_type' => 'CampaignJobCompleted',
    'data' => [
        'campaign_name' => 'Sample Campaign',
        'message' => 'I am sending a message'
    ]
];
'LRedis::publish('test-channel',json_encode($data));

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

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

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