2016-03-24 29 views
1

Yayın mesajı için Redis + laravel + nodejs kullanıyorum.laravel ile Redis ve Nodejs kullanarak mesaj nasıl yayınlanır

function postReassignlead(Request $request){ 
    $data = Input::get(); 
    $leadId = $data['leadid']; 
    $assignedtoid = $data['assignedtoid']; 
    $assignedbyid = $data['assignedbyid']; 

    $message = "A lead :".$leadId," has been assigned to YOU by ".$assignedbyid.""; 

    $redis = LRedis::connection(); 
    $redis->publish('message', $message); 

} 

ve benim server.js home.php sayfasındaki sonra

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

server.listen(8890); 

io.on('connection', function (socket) { 

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

    redisClient.on("message", function(channel, message) { 
    console.log("mew message in queue "+ message + "channel"); 
    socket.emit(channel, message); 
    //res.flush(); 
    }); 

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

}); 

yılında kontrolörü olarak mesaj yayınlanacak olan İşte

<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
    <script src="https://cdn.socket.io/socket.io-1.3.4.js"></script> 

    <div class="container"> 
     <div class="row"> 
      <div class="col-lg-8 col-lg-offset-2"> 
       <div id="messages"></div> 
      </div> 
     </div> 
    </div> 
    <script> 
     var socket = io.connect('http://localhost:8890'); 
     socket.on('message', function (data) { 
      $("#messages").append("<p>"+data+"</p>"); 
     }); 
    </script> 

izleyin olarak benim Kod olduğu Sisteme giriş yapan bütün kullanıcılara, Ama bunu sadece bir kullanıcıya değiştirmek istiyorum

Ben belirli bir kullanıcı kimliğine geniş can

şey

benim home.php kadar

$redis = LRedis::connection(); 
    $redis->publish('message_1990', $message); 

gibi

bazı Doing bu

<script> 
     var socket = io.connect('http://localhost:8890'); 
     socket.on('message_1990', function (data) { 
      $("#message_1990").append("<p>"+data+"</p>"); 
     }); 
</script> 

cevap

0

gibi kod şey olabilir Kendi projem için Redis üzerine araştırma yaptım ve sorunuza rastladım ..

Anladığım kadarıyla, yayınlama ve abone olma yöntemlerinin ilk parametresi, iletişim için kullanılan "kanal" dır. Bu durumda, hem gönderen hem de alıcı bitten sadece 'message_1990' mesajını güncellemeniz gerekecek.

Redis - Laravel

Bu laravel uygulaması mesajlar, her zaman kolayca belirlenebilir, ya da belki mesajı bir ekip yayın mesajdır olmayabilir yayımlamak için hangi kanalın bilemez anlamına gelir.

Esneklik için pass the message in JSON form olabilir, daha sonra istemciden teslimatı/ekranı belirlemek için paketini açabilirsiniz. Bu şekilde mesaj herkese teslim edilir ve müşteri bununla ne yapacağına karar verebilir. Laravel kontrolör içerisinde Yani

Pass PHP array to Javascript

: Ben JSON.parse() kullandım

İşte
<script> 
    socket.on('message', function (data) { 
     obj = JSON.parse(data); 

     // receive team and personal messages 
     if((obj.msgtype == "leadGen") || (obj.rx == "bsmith")) { 
      $("#message").append("<p>"+data+"</p>"); 
     } 
     // else ignore the message 

    }); 
</script> 

ama:

$message = "A lead :".$leadId," has been assigned to YOU by ".$assignedbyid.""; 

$redis = LRedis::connection(); 

// PHP array to convert to JSON, add other fields as necessary 
$msgPacket = ["rx"=>"bsmith","msgtype"=>"leadGen","message"=>$message]; 

// send as a JSON data packet 
$redis->publish('message', json_encode($msgPacket)); 

istemci tarafında unpackage the JSON data günü onunla ne yapacağını belirlemek için not always necessary ve veri deolarak veri değişkeni üzerinden erişilebilir 0

+0

hehe cevap için ben Json verileri yerine benzer bir yaklaşım uyguladı Ben tek bir dize ile _ _ ile ayrılmış ve ön uçta sadece JS dizisi içine yarık gönderdi ve 'ID' kontrol mesaj, Auth :: user-> ID' ile aynıdır. Sonra mesaj, pop-up'ına eklenir :). Ama burada her kullanıcı mesaj soketini dinliyor, her kullanıcının kendi soketini dinlemesinin bir yolu var, öyle ki yayınladığımız zaman sadece o kullanıcı için değil mi? – Vikram

İlgili konular