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

时间:2016-03-01 14:03:18

标签: php node.js redis socket.io laravel-5.1

我基于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));

当用户要求与另一个人见面时,会预先决定房间/频道,所以我想在进入房间之前注入频道名称。

感谢任何人提供的帮助。

1 个答案:

答案 0 :(得分:0)

我想你想为io.in(&#39;聊天室&#39;)等用户提供不同的聊天室。发射(数据)?如果是这样你需要首先得到用户id是套接字ID并将id插入特定的聊天室,你可以添加用户ID并通过javascript slice功能删除id希望这会有帮助吗?主要主题是在某些事件上你想要收集id等用户信息并将所有用户id保存在空数组中然后在任何事件中创建id并让他们进入那个命名的聊天室......