【发布时间】:2018-07-09 14:28:46
【问题描述】:
这是我的客户端代码:
<script type="text/javascript">
$(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$("#send").click(function(){
content = $("textarea").val();
$.ajax({
url: "{{route('send.message')}}",
method: "POST",
data: {content},
success: function(){
socket.emit('message', content);
}
});
});
});
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
<script>
var socket = io('http://localhost:3000');
socket.on("channel:App\\Events\\EventName", function(message){
console.log(message);
});
</script>
节点JS代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('channel', function(err, count) {});
redis.on('message', function(channel, message) {
console.log('Message Recieved: ' + message);
message = JSON.parse(message);
io.on('connection', function(socket) {
console.log("made socket connection", socket.id);
});
io.emit(channel + ':' + message.event, message.data);
});
http.listen(3000, function() {
console.log('Listening on Port 3000');
});
Laravel PHP 服务器端(ajax 目标):
public function sendMessage(Request $request){
event(new EventName($request->all()));
$message = new Message;
$message->message = $request->content;
$message->save();
}
在客户端,它返回正在发送的数据,您可以在socket.on(......) 中看到,我想做的是,一旦通过ajax 发送消息,我想使用socket.emit() 发出该消息,并抓住它
io.on('connection', fuction(socket)({
});
但它无法在那里捕捉到它。这是为什么?我想做的是将消息广播到除我的套接字之外的其他套接字。准确来说是这样的
io.broadcast.emit()
请问我怎样才能使它工作?谢谢。
回应@Laravelmeester 嘿,抱歉,我确实设置了我的活动。但是我没有在代码中发布它。我这里有这个问题:
当我让 socket.io 像这样在 redis 回调函数中监听时:
redis.on('message', function(channel, message) {
console.log(message); //look here
socket.broadcast.emit('message', "huhu");
io.on('connection', function(socket) {
socket.on('message', function(data) {
console.log(data);
socket.broadcast.emit('message', data)
});
});
});
当我 console.log(message) 它输出 3-4x ?为什么这样做?我只有一个客户端连接。所以例如我发送
test123
,它会输出
test123
test123
test123
【问题讨论】: