我正在制作聊天应用程序,但遇到了问题。我提交了一条消息,然后将其保存到我的数据库中,然后通过该频道发送给当前页面上的所有人。我遇到的问题是,邮件会被保存并发送,但除了发送邮件的人之外,任何人都不会收到。
这是我的服务器socketio代码:
var server = http.createServer( app ).listen( app.get( 'port' ) ),
io = require( 'socket.io' ).listen( server );
//This is where we will listen and emit messages
io.sockets.on( 'connection', function( socket ) {
console.log( 'Socket IO connected' );
socket.on( 'send', function( data ) {
console.log( data );
var chat_model = require( './models/chat_model' );
chat_model.add( data, send_through_channel );
function send_through_channel( data ) {
console.log( data );
socket.emit( 'chat', data[0] );
}
});
});
这是我的客户端socket.io代码:
define( [ 'Backbone', '/socket.io/socket.io.js' ], function() {
return Backbone.View.extend({
socket: io.connect( 'http://192.168.0.38:3000' ),
initialize: function() {
//Fade out the success message
$( '.js-success-float' ).fadeOut( 2000 );
//Listen for new messages
this.socket.on( 'chat', _.bind( function( data ) {
console.log( data );
this.append_message( data );
}, this ) );
}
//More unrelated stuff below
只是想知道是否有人能指出我正确的方向,为什么邮件只是被发送者收到而不是其他观看聊天的用户。
提前致谢。
答案 0 :(得分:2)
您应该向所有人广播该消息,而不是向特定接收者发送消息: 所以不是这个
socket.emit( 'chat', data[0] );
但是这个:
io.sockets.emit( 'chat', data[0] );
答案 1 :(得分:0)
问题在于:
socket.emit('chat',data [0]);
您正在向您收到的套接字发送数据。在你的情况下你应该使用:
io.emit('chat',data [0]);
或
io.sockets.emit('chat',data [0]);
将其发送给所有人,或者:
socket.broadcast.emit('chat',data [0]);
将其发送给除发件人之外的所有人。