sodasix

1516 经验值

我是这样实现的, php 发布消息到 redis 的时候, 增加一个字段, 如代码我是直接 md5了 用户登陆账号, 然后再 node.js 接受到 redis 信息的时候, 获取到 sendTo , 然后 socket 广播一条channel:' + messages.sendTo 的广播, 再 HTML socket 监听相应的广播

php

 $md5Account = md5($event->member->user_account);
            $data = [
                'sendTo' => $md5Account,
                'data'   => [
                    'ToUser'     => $md5Account,
                    'status'     => $event->order->status,
                    'statusText' => $event->order->stateThat(),
                    'order'      => $event->order->order_id,
                ],
            ];
            // 发布到redis 对应频道
            \Redis::publish('orderStatusChange', json_encode($data));

node.js

// 订阅频道
redis.subscribe('orderStatusChange');
redis.on('message', function (channel, messages) {
    messages = JSON.parse(messages);
    io.emit(channel + ':' + messages.sendTo, messages.data);
});

html

var socketUserAccount = "{ md5($userinfo->user_account) }";
    var socket = io('domain:8081');
    socket.on('orderStatusChange:' + socketUserAccount, function (data) {
       
    });

@zonghua

参照 realtime-laravel-app-with-socket-io 视频实现的

laravel 部分 给redis指定频道推送一条数据,

Route::get('redis', function () {
    $data = [
        'evnet' => 'test',
        'data'  => [
            'name' => [1, 2, 3, 4, 4, 5, 667, 123],
        ],
    ];
    \Redis::publish('test-channel', json_encode($data));
    return view('welcome');
});

node.js 部分, 订阅一个 redis 的频道, 利用 socket.io 推送给前端

var http = require('http').Server();
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
// 订阅频道
redis.subscribe('test-channel');
redis.on('message', function (channel, messages) {
    messages = JSON.parse(messages);
    console.log(messages, channel);
    io.emit(channel, messages.data);
});
// web server
http.listen(3000, function () {
    console.log('server listen');
});

html 部分, socket 监听 频道, 获取 node 给到的数据

 var socket = io('192.168.88.20:3000');
    socket.on('test-channel', function (data) {
    console.log(data);
});

这样的每个打开的游览器都能够接受到数据,
可是实际中应该是根据 不同的用户去发送不同的数据, 我想过根据 UID 来实现, 但是现在 UID 是自增的, 如果我随便改下不就也能接受到别人的数据了吗,

这个判断应该在 laravel 完成还是 node 来完成呢?

保存之前先 count 一下 一小时之类的数据,

laravel 自带了分页的方法,

$someUsers = User::where('votes', '>', 100)->paginate(15);

<?php echo $someUsers->render(); ?>

这样就可以获取到一个兼容Bootstrap CSS的分页HTML
文档传送
分页

就是登陆跳转的时候有时候会比较慢, 给个友好提示..