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

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

我根据许多使用 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/

相关文章:

php - 如何将utf8_general_ci编码的数据显示为json?

javascript - 巴别塔似乎不起作用

javascript - Sequelize 中虚拟字段的 Getter 和 Setter

spring-boot - 如何将 Redis 连接到 Spring Boot?

node.js - 使用 Node.js、Redis 和 CouchDB 管理 future 事件通知

php - 浏览器无法打开php页面?

php - 在 MySql 中使用年龄单位按年龄范围排序

php - 如何防止 PHP 中的 SQL 注入(inject)?

html - 在 Node.js 中加载基本 HTML

node.js - 在 node.js 中执行多个 redis 查询的更简洁的方法