【问题标题】:Socket.io, PHP, Node, and Redis Chat roomsSocket.io、PHP、Node 和 Redis 聊天室
【发布时间】:2016-03-01 14:03:18
【问题描述】:

我根据许多关于 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));

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 所以我可以将它们从当前房间(默认为测试通道)中删除,然后通过 javascript 从 php 文件将它们添加到另一个自定义房间?
    • 来自 php? socket.io 有其内置的房间设施,为什么要从 php 创建房间进行数据分析,你可以使用 php 并做某种数据库
    • 调用js的页面是php。我从页面上想知道如何更改 redis 订阅的房间。我可以在 socket.io 服务器页面中 psubscribe('*') 以便它接收任何通过并传递它吗?
    • 我使用的是 Laravel 5.2
    • 很好,现在 laravel 以一种很棒的方式支持 redis,用它来订阅和做 stuffsd
    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2016-01-18
    • 2017-06-20
    • 2012-05-12
    • 2018-12-30
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多