Node.js 在发件人端向其他人广播两次聊天信息
我正在使用laravel+socet.io+redis开发一个聊天应用程序,并使用MYSQL存储聊天信息Node.js 在发件人端向其他人广播两次聊天信息,node.js,laravel,redis,Node.js,Laravel,Redis,我正在使用laravel+socet.io+redis开发一个聊天应用程序,并使用MYSQL存储聊天信息 <script> var socket = io('http://localhost:6001'); socket.on('chat:message',function(data){ console.log(data) if($('#'+data.id).length == 0){ $('#data')
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
所有流程都正常工作,但我面临一个问题。
就是
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
当发件人向聊天室发送消息时,该消息首先存储在数据库中,然后发送到其他客户端Think redis事件
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
因此,在这种情况下,一条消息在发送方窗口重复两次。其他客户端聊天室工作正常。
下面我为发送方和接收方窗口附上两张图片。(*它们在同一个聊天室)
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
这是我的HTML、redis+nodeserver编码部分
<html>
<body>
<div id="data">
@foreach($messages as $message)
<p id="{{$message->id}}">database_<strong>{{$message->Sender}}
</strong>:
{{$message->MessageTxt}}</p>
@endforeach
</div>
<div>
<form action="sendMessaged" method="POST">
{{csrf_field()}}
Name: <input type="text" name="Sender">
<br>
<br>
Content: <textarea name="MessageTxt" rows="5" style="width:100%">
</textarea>
<button type="submit" name="send">Send</button>
</form>
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
把这行改成
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
socket.emit(channel+":"+message.event,message.data.message);
对此
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
socket.broadcast.emit(channel+":"+message.event,message.data.message);
为了供你参考,我列出了所有可能的场景
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
仅发送到发送方客户端
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
socket.emit(channel+":"+message.event,message.data.message);
发送到所有客户端,包括发件人
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
io.emit(channel+":"+message.event,message.data.message);
io.in('game').emit(channel+":"+message.event,message.data.message);
io.of('myNamespace').emit(channel+":"+message.event,message.data.message);
发送至“游戏”室(频道)中的所有客户端(发件人除外)
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
socket.broadcast.to('game').emit(channel+":"+message.event,message.data.message);
发送至“游戏”室(频道)中的所有客户端,包括发送者
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
io.emit(channel+":"+message.event,message.data.message);
io.in('game').emit(channel+":"+message.event,message.data.message);
io.of('myNamespace').emit(channel+":"+message.event,message.data.message);
发送至发送方客户端,仅当他们在“游戏”室(频道)时
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
正在发送到命名空间“myNamespace”中的所有客户端,包括发件人
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
io.emit(channel+":"+message.event,message.data.message);
io.in('game').emit(channel+":"+message.event,message.data.message);
io.of('myNamespace').emit(channel+":"+message.event,message.data.message);
发送到单个socketid
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});
socket.broadcast.to(socketid).emit(channel+":"+message.event,message.data.message);
希望这对您有所帮助您必须在客户端执行此操作,因为中间涉及到代理。我为连接到客户端实现API。因此,我如何处理它非常感谢您的帮助。我尝试了这些方法。但同样的问题,@androidpc,正如我已经告诉您的那样。。。您在代理的后面,因此必须在客户端执行此操作
<script>
var socket = io('http://localhost:6001');
socket.on('chat:message',function(data){
console.log(data)
if($('#'+data.id).length == 0){
$('#data').append('<p>else__<strong>'+data.Sender+'</strong>: '+data.MessageTxt+'</p>')
}
else{
}
});