【问题标题】:Attaching event emitter to socket.connected将事件发射器附加到 socket.connected
【发布时间】:2017-03-12 06:49:45
【问题描述】:

我目前正在编写一个 Electron 应用程序,在主进程中我想通过 websockets 与服务器通信。

我的部分主进程的代码库取决于用户的套接字连接状态。我需要socket.io-client

const socket = require('socket.io-client')(host);

这使我可以访问变量socket.connected,根据是否与服务器建立连接,它是truefalse

因此,我想要将事件发射器附加到此变量。我已经让它与轮询一起工作

var events = require('events').EventEmitter;
var event = new events();

// Emits successfully every 200ms 'Connection: true|false'
event.on('status', function(status){
  console.log('Connection: ', status);
});

setInterval(function() {
  let status = socket.connected;
  event.emit('status', status);
}, 200);

但想知道这是否真的是实现它的方式。对我来说,不得不求助于像 nodejs 这样的异步框架中的轮询似乎很奇怪。另一方面,我找不到其他方法来实现。最好的情况是以某种方式将事件发射器直接附加到socket.connected,但无法找到如何做到这一点。有人可以建议我更好的实施方式吗?

谢谢

【问题讨论】:

  • 您真正希望收到通知的事件是什么? socket.io-client 用于作为客户端连接到其他 socket.io 服务器。
  • 好吧,这正是我的用例:我的电子应用程序作为客户端连接到 socket.io 服务器......
  • 还有,您希望收到什么事件通知?
  • 也许我的帖子不清楚... socket.io-client 跟踪与socket.connected=true|false 上的套接字服务器的连接。每当此变量更改 true->false/false->true 我希望发出该更改。
  • 这正是我在下面的回答所显示的。套接字在连接时已经发出一个事件。

标签: node.js sockets socket.io electron polling


【解决方案1】:

您可以通过connect 事件获得客户端连接完成的通知:

socket.on('connect', function() {
    // client socket is now connected to the server
});

socket.on('disconnect', function() {
    // client socket is now disconnected from the server
});

此处的客户事件文档:http://socket.io/docs/client-api/#manager(url:string,-opts:object)。如果您还想查看其他内容(例如重新连接),该文档中还有其他事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多