【问题标题】:client-client communication using nodejs使用 nodejs 的客户端-客户端通信
【发布时间】:2014-01-29 09:23:19
【问题描述】:

我想交流 2 个网页 page1.html 和 page2.html。我认为 page1 与 app1.js 节点应用程序相关,而 page2.html 与 app2.js 节点应用程序相关。这个想法是使用 websockets 将数据从 page1.html 发送到 app1.js,然后 app1.js 将数据发送到 page2.html。我的第一个想法是 app1.js 将数据发送到 app2.js,然后 app2.js 发送到 page2.html。我知道如何使用 Web 套接字将 page1.html 与 app1.js 进行通信(客户端-服务器),但如何将数据从 app1.js 发送到 app2.js?在 app1.js 我有

io = require('socket.io').listen(3000); //and 

io.sockets.on('connection', function (socket) {
    socket.on('GETDATAFROMPAGE1', function (data){
         .....I Get data to be sent to app2?
    });
}

我需要为其他端口创建一个新的 io2 吗?如何将数据发送到 app2.html? 我知道如何进行客户端服务器通信,但我不知道服务器-服务器通信以及如何混合两者 总结:page1.html -> app1.js --> app2.js --> page2.html使用websockets 谢谢你的回答

【问题讨论】:

    标签: node.js websocket client-server


    【解决方案1】:

    似乎您可以通过简单的方式实现这一点,但您不知道,因为您说您希望将数据从 page1 发送到 app1,从 app1 发送到 app2,从 app2 发送到 page2。所以基本上,如果我让你正确的话,你想将数据从 page1 发送到 page2。可以在app.js中只创建一个服务器,使用socket.io连接两个页面互相发送数据。

    假设你有page1.html:

    socket.emit('GETDATAFROMPAGE1', data);
    

    page2.html:

    socket.on('dataFromPage1', function(data){
        //do something
    });
    

    你有app.js:

    io.sockets.on('connection', function (socket) {
    socket.on('GETDATAFROMPAGE1', function (data){
         socket.broadcast.emit('dataFromPage1', data)
        });
    }
    

    broadcast 事件只发送给数据的发送者以外的其他人。现在您可以将数据从 page1.html 发送到服务器,从服务器发送到 page2.html

    【讨论】:

    • 这似乎是一个更好的解决方案,谢谢...我要试试
    • 如果 page1.html 与 page2.html 不同,如何仅使用 app.js 打开 page1.html 和 page2.html?我以为每个网页都和一个 js 节点应用有关?
    • 您首先需要了解 node.js 是如何工作的。您可以使用单个服务器渲染任意数量的页面。寻找路由和渲染。使用 expressjs,它是 Node.js 的一个模块。查看 Node.js express 和 socket.io 的任何教程
    【解决方案2】:

    你有两个选择:

    1) 创建 HTTP 路由,用于在两个服务器之间来回处理发布/获取数据(我认为这很简单,并且您知道如何在服务器之间配置路由和获取/发布日期)

    2) 您也可以在服务器级别使用套接字。看看node的net文档http://nodejs.org/api/net.html

    您的代码将如下所示:

        //server
            var net = require('net');
            var server = net.createServer(function(c) { //'connection' listener
              console.log('server connected');
              c.on('end', function() {
                console.log('server disconnected');
              });
              c.write('hello\r\n');
              c.pipe(c);
            });
            server.listen(8124, function() { //'listening' listener
              console.log('server bound');
            });
    
      //client
            var net = require('net');
            var client = net.connect({port: 8124},
                function() { //'connect' listener
              console.log('client connected');
              client.write('world!\r\n');
            });
            client.on('data', function(data) {
              console.log(data.toString());
              client.end();
            });
            client.on('end', function() {
              console.log('client disconnected');
            });
    

    您也可以使用json-socket

    【讨论】:

    • 谢谢...要在我的代码中使用它:我需要在 socket.on 中使用服务器吗? -> socket.on('GETDATAFROMPAGE1', function (data){ .........var server = net.createServer(......your code...) });跨度>
    • 您的代码用于浏览器和服务器之间的通信。因此,在您的代码中,您需要将数据通过管道传输到 app1 app2 套接字流。
    • 我想给你一点,但我没有 15 的声誉
    • 别担心……总有一天你会拥有的。而不是给我一个点 - 帮助别人在 SO :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多