socket.emit is socket.on和angularjs不开火
这是我的密码
socket.emit('event1', 'event1 data'); // This is sent to nodejs server
socket.on('login', function(data) { // This is triggered from Nodejs server
if(with some condition) {
socket.emit('event2', 'event2 data'); // This has to be sent to browsers,
// but this is not firing
}
});event2是(从浏览器到到浏览器)--这不是在触发
这是我的角质服务
angular.module('myApp')
.factory('socket', function($rootScope) {
var socket = io.connect('http://192.168.0.105:5000');
return {
on: function (eventName, callback) {
socket.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(socket, args);
});
});
},
emit: function (eventName, data, callback) {
socket.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
},
ioemit: function (eventName, data, callback) {
console.log(io.sockets);
io.sockets.emit(eventName, data, function () {
var args = arguments;
$rootScope.$apply(function () {
if (callback) {
callback.apply(socket, args);
}
});
})
}
};
});我刚试过像io.sockets.emit这样的东西,但没什么用。任何帮助都是非常可观的。
发布于 2019-12-30 01:07:10
当你这样做时:
socket.emit('event2', 'event2 data'); 它向您的服务器发送消息,而不是向其他客户端发送消息。因此,您的服务器将不得不向适当的客户端发送该消息。socket.io不直接向客户端发送客户端。它不是这么做的。它从服务器发送到客户端或从客户端发送到服务器。
如果您有其他与服务器的socket.io连接的原因,那么只需几行代码就可以教会服务器如何将消息从clientA转发到clientB。您只需要一个clientA可以使用的标识符来指示它想要向哪个其他客户端发送消息,然后服务器只需要能够将该标识符与clientB的socket.io连接相关联。通常,您可以使用您已经拥有的用户名或服务器已经知道的作为标识符的socket.id。
浏览器通常不会在没有中间服务的情况下进行对等连接,因为两个客户端通常都在防火墙后面,所以在不使用中间服务器的情况下在它们之间建立连接是很棘手的。网络浏览器确实支持webRTC,这是一个点对点的方案,但仍然需要一个服务器,以方便直接的客户端到客户端连接。如果您想了解更多关于webRTC的信息,这里有一个关于它如何工作的视频。如果您已经有到您的服务器的socket.io连接,而且您的数据不是超级实时的(比如语音聊天或视频聊天),那么使用服务器将socket.io上的消息从clientA转发到clientB可能会更容易一些。
https://stackoverflow.com/questions/59520685
复制相似问题