使用外部节点脚本连接到已在 index.js 中定义的 socket-io

Connect to socket-io already defined in index.js using external node script

我在我的 MEAN 堆栈中使用 hapijs 并实现了 socket.io(使用它作为参考:http://matt-harrison.com/using-hapi-js-with-socket-io/)一切正常,没有问题。它在我的应用程序中效果很好!

但是,我将通过命令行单独 运行 脚本(这将对应用程序进行一些维护)我希望连接到同一个网络套接字并能够推送如果需要刷新数据,则向客户发送消息。

我的 index.js 直接取自示例:

var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: 3000 });

var io = require('socket.io')(server.listener);

io.on('connection', function (socket) {

    socket.emit('Hello');

});

server.start();

我尝试创建一个单独的 JS 文件,并执行以下操作:

var socket = require('socket.io');
var io = socket.listen(3000);

然后通过io发送消息。这似乎不对......我想我想知道这是否可以完成。弄乱我要么创建了一个单独的网络套接字,要么没有连接到客户端。

如果我需要提供更多信息,请告诉我。

谢谢。 T

在您提供的代码中,您正在创建 2 个服务器。 [io.listen()][1] 作为服务器监听一个端口。

为了传递消息,您需要做的是在单独的脚本中创建一个 socket.io client。有一个名为 socket.io-client 的单独模块,您可以要求它成为客户端:

client.js

var io = require('socket.io-client');
var socket = io('http://localhost:3000');

socket.on('beep', function () {
    console.log('beep');
    socket.emit('boop');
});

server.js

这也是您的服务器脚本的一个稍微更新的版本(hapi v9.0.0 对 server.start() 有一个强制回调):

var Hapi = require('hapi');

var server = new Hapi.Server();
server.connection({ port: 3000 });

var io = require('socket.io')(server.listener);

io.on('connection', function (socket) {
    socket.emit('beep');
    socket.on('boop', function () {
        console.log('boop');
    });
});

server.start(function () {
    console.log('Started Server!');
});

如果您打开几个终端和 运行 这些终端,您应该会看到它们之间传递的消息并且 beepboop 注销: