首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从浏览器到浏览器的socket.emit不触发

从浏览器到浏览器的socket.emit不触发
EN

Stack Overflow用户
提问于 2019-12-29 15:23:19
回答 1查看 60关注 0票数 0

socket.emit is socket.on和angularjs不开火

这是我的密码

代码语言:javascript
复制
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是(从浏览器到浏览器)--这不是在触发

这是我的角质服务

代码语言:javascript
复制
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这样的东西,但没什么用。任何帮助都是非常可观的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-30 01:07:10

当你这样做时:

代码语言:javascript
复制
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可能会更容易一些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59520685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档