Javascript 如何使用Express、AngularJS、Socket.io广播和获取通知?

Javascript 如何使用Express、AngularJS、Socket.io广播和获取通知?,javascript,angularjs,node.js,express,socket.io,Javascript,Angularjs,Node.js,Express,Socket.io,我正在尝试建立一个通知系统。为了演示这一点,用户1正在向用户2发送好友请求。我正在使用express.js、angularjs和socket.io。点击按钮,User1发送请求。在User2的末尾,有一个套接字On(),它正在侦听好友请求事件。但当我在广播时,其他用户无法接收任何消息 app.js(节点服务器文件) config.js // This file handles the configuration of the app. // It is required by app.js v

我正在尝试建立一个通知系统。为了演示这一点,用户1正在向用户2发送好友请求。我正在使用express.js、angularjs和socket.io。点击按钮,User1发送请求。在User2的末尾,有一个套接字On(),它正在侦听好友请求事件。但当我在广播时,其他用户无法接收任何消息

app.js(节点服务器文件)

config.js

// This file handles the configuration of the app.
// It is required by app.js

var express = require('express');

module.exports = function(app, io){

    // Set .html as the default template extension
    app.set('view engine', 'html');

    // Initialize the ejs template engine
    app.engine('html', require('ejs').renderFile);

    // Tell express where it can find the templates
    app.set('views', __dirname + '/views');

    // Make the files in the public folder available to the world
    app.use(express.static(__dirname + '/public'));

};
routes.js(从该文件发出好友请求)

角度代码.js(角度代码文件)

home.html

<!DOCTYPE html>
<html ng-app="notificationApp">
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body ng-controller="chatCTRL">
<h1>welcome</h1>
    <div id="createbutton">
        <div id="little"><button ng-click="sendrequest(senderId,6)">Send Friend Request to User#6</button></div>
    </div>

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="../angular/angular.js"></script>
<script src="../angular/common_angular.js"></script>

</body>
</html>

欢迎
向用户发送好友请求#6
一些客户端体系结构:
  • 在大多数情况下,在客户端,最好将套接字连接移动到服务。并在服务初始化时建立连接(服务是单例的,因此启动时将有一个连接),并将此服务注入控制器中
  • 可以方便地使用创建一些父抽象控制器 所有套接字侦听器,因此无论angular controller是否处于活动状态,所有侦听器都在监视。当父控制器从套接字获取数据时,它可以将数据广播给子控制器
  • 在注释代码中,您有:

        //var socket = io();
        //socket.on('connect', function () {
        //    io.on('friend request', function (data) {
        //        alert("here")
        //    });
        //});
    
    //io.emit('friend request', {
    //    receiverid: data.receiverid
    //});
    
    将其更改为此(如果您在服务中建立连接,则应省略连接部分):

    后端: 在注释代码中,您有:

        //var socket = io();
        //socket.on('connect', function () {
        //    io.on('friend request', function (data) {
        //        alert("here")
        //    });
        //});
    
    //io.emit('friend request', {
    //    receiverid: data.receiverid
    //});
    
    您应该使用
    var chat=io.on('connection',function(socket){…
    中的
    socket
    ,而不是
    io.emit

    创建数组变量,在连接部件之前,您将在其中存储所有具有用户id的套接字:

    var socketList = [];
    var chat = io.on('connection', function (socket) {
      socketList.push({id:someId,socket:socket})
      ...
    }
    
    现在在
    send request
    中,用户应该发送其朋友的id(我们必须知道应该通知哪个用户-当然我们可以通知所有人):

    另外,我不喜欢这部分内容,因为这意味着taget用户从接收方客户端获取接收方id。这可能不安全(用户可以更改其id并发送其他id)。我更喜欢在服务器端创建id,当用户A向用户B发送通知时,我从服务器变量获取用户A id

    我创建了聊天应用程序的简单原型(angular和express),我在这里提到了一些事情。我想你的应用程序仍然存在问题,去那里检查我的代码:

    @Nutty…嗨,我想在我的meanjs应用程序中请求朋友…我尝试了很多方法,搜索了很多链接,以找到确切的解决方案,但对我们没有帮助…那么你能帮助我们吗?…我如何在我的应用程序中编写请求朋友的代码…请帮助我们,,,,谢谢如果你有plunker,请提供了解确切的结构and解决方案…尽快恢复…谢谢…你好,我想在我的meanjs应用程序中进行好友请求…我尝试了许多方法,搜索了许多链接以找到确切的解决方案,但对我们没有帮助…所以你能帮助我们吗?…我如何编写代码在我的应用程序中执行好友请求…请帮助我们,,,,谢谢你你有plunker,请提供确切的结构和解决方案…尽快回复…谢谢…嗨。stackoverflow的想法是与广大观众分享知识。我不确定我是否可以帮助你,可能是其他人。请创建单独的问题,很可能有人回答。你也可以粘贴到该问题的链接下面是我的评论,我会尽力回答。
    //io.emit('friend request', {
    //    receiverid: data.receiverid
    //});
    
    var socketList = [];
    var chat = io.on('connection', function (socket) {
      socketList.push({id:someId,socket:socket})
      ...
    }
    
    socket.on('send-request',function(data){
      socketList.forEach(function(soc){
        if(soc.id === someId){
          soc.socket.emit('friend request', {
            receiverid: data.receiverid
          })
        }
    });