使用redis

时间:2017-01-25 02:49:58

标签: node.js laravel redis socket.io

我正在尝试使用laravel,redis pub / sub和socket io构建一个安全的私人facebook,如消息系统。所有的console.log函数都会记录消息,说明节点服务器上的所有内容都已完成,一切正常,直到我尝试将消息发送给客户端。当我尝试向客户端发送消息时,什么都没发生。

虽然我不认为laravel上的控制器方法在这里很重要,但无论如何。如果没有必要,您可以跳过Laravel控制器

Laravel消息控制器:

public function store($id, Request $request)
{
    //Stores message in $message

    //Connects redis
    $redis = Redis::connection();

    $data = ['message' => $request->input('message'), 'user' => Auth::user()->name,
     'room' => $message->conversation_id];
    $redis->publish('message', json_encode($data));

    return Redis::get('message');
    response()->json([]);
}

在JSON输出中发布Redis内容:

{message: 'some message', user: 'john doe', room: 1}

节点服务器

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');

server.listen(3000);
io.on('connection', function (socket) {

  console.log("client connected");
  var redisClient = redis.createClient();
  redisClient.subscribe('message');

  redisClient.on("message", function(channel, data) {
    data = JSON.parse(data);

    socket.join(data.room, function() {
      console.log('Joined room '+data.room);
    }); 
    console.log("new message add in queue "+ data.room + " channel");
    socket.to(data.room).emit(channel, data);
  });

  socket.on('disconnect', function() {
    redisClient.quit();
  });

});

客户端JS

var socket = io.connect('http://localhost:3000');
socket.on('message', function (data) {
    //Just console the message and user right now.
    console.log(data.message+" " + data.user);
});

我不知道我的问题是我是不是在客户端指定房间。如果是这样,有没有办法向客户端发送数据而不指定客户端代码中的房间?为什么我不能向客户发送消息?

0 个答案:

没有答案