【发布时间】:2020-04-18 14:25:01
【问题描述】:
带有 angularjs 的 socket.on 内的 socket.emit 没有触发
这是我的代码
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 之类的东西,但这并没有帮助。任何帮助都非常可观
【问题讨论】:
-
当你这样做时:
socket.emit('event2', 'event2 data');,它会向你的服务器发送一条消息,而不是向其他客户端。因此,您的服务器必须随后将该消息发送给适当的客户端。 socket.io 不会直接将客户端发送给客户端。那不是它的作用。它从服务器发送到客户端或从客户端发送到服务器。 -
@jfriend00 还有其他选择吗?
-
如果您有其他原因需要与服务器建立 socket.io 连接,只需几行代码即可教服务器如何将消息从客户端 A 转发到客户端 B。您只需要一个标识符,clientA 可以使用它来指示它想要向哪个其他客户端发送消息,然后服务器只需要能够将该标识符与 clientB 的 socket.io 连接相关联。通常您可以使用您已经拥有的用户名或服务器已经知道的
socket.id作为标识符。 -
浏览器通常不会在没有中间服务的情况下进行点对点,因为两个客户端都在防火墙后面,因此在不使用中间服务器的情况下在它们之间建立连接很棘手。
-
@jfriend00 有道理.. 谢谢
标签: node.js angularjs socket.io