【问题标题】:Socket.io Rooms in a Hostile Network Environment?敌对网络环境中的 Socket.io 房间?
【发布时间】:2014-09-24 20:18:33
【问题描述】:

我有一个客户的网络环境非常令人沮丧的问题,我希望有人能帮我解决这个问题...

他们有一个应用程序,目前完全在 VBA for Excel 中编写。 (不笑。)

我帮助他们改进产品和用户体验的一部分涉及将他们的 UI 从 VBA 表单元素转换为单个 WebBrowser 元素,该元素包含一个在 Excel 和他们的服务器之间进行通信的丰富 Web 应用程序。它主要通过 socket.io 服务器/连接来实现。

当用户登录时,会与套接字服务器上的房间建立连接。

最初的“所有者”称为:

socket.on('create', function (roomName, userName) {
    socket.username = userName;
    socket.join(roomName);
});

后续“参与者”叫:

socket.on('adduser', function (userName, roomName){

    socket.username = userName;
    socket.join(roomName);
    servletparam = roomName;
    var request = require('request');

    request(bserURL + servletparam, function (error, response, body) {
        io.sockets.to(roomName).emit('messages', body);
    });

    servletparam = roomName + '|' +  userName;
    request( baseURL + servletparam, function (error, response, body) {
        io.sockets.to(roomName).emit('participantList', body);
    });
});

这一切都运行良好,直到我们的 VBA 代码将所有内容锁定,导致套接字连接丢失。当客户端浮出水面时,它会强制 VBA 引起暂停(持续时间从 20 秒到 3 分钟不等),我尝试通过将 onclick 传递给触发脚本重新加入的 HTML 元素再次加入房间。奇怪的是,这行不通。但是,如果我等待几秒钟并手动单击该对象,它确实会重新加入房间。是的,正在从 Excel 文件中接收到点击...我们看到了到套接字服务器的消息,但它不允许该调用重新加入房间。

这就是让调试变得非常困难的原因。无法在 VBA 的 WebBrowser 对象中看到控制台,因此我使用 weinre 作为远程调试器,但是 a)它似乎不会将日志和错误输出到控制台,除非我触发它们在控制台中发生,并且 b)当 socket.io 断开连接时,它失去了连接,我已经死在水里了。

现在,为了完整起见,如果我删除 .join() 调用和 .to() 调用,这一切都会像我们期望的那样工作,它会减去所有写入大型非私人房间的消息。所以这是重新加入房间的问题。

作为 StackOverflow 的长期用户,我知道一个包含很少代码的冗长问题是不受欢迎的,但这种设置绝对没有什么特别之处(这可能是问题的一部分)。它只是简单的发射和广播(来自客户端)。我很乐意根据后续问题填写任何内容。

【问题讨论】:

    标签: vba socket.io webbrowser-control socket.io-1.0 weinre


    【解决方案1】:

    对于将来可能遇到此问题的任何人...

    答案是在服务器端管理您的房间重新连接。如果您的客户端无法建立可靠的连接,或者经常断开连接,那么它可以跟踪服务器端的房间并在它们进行连接时加入它们。

    另一个问题是聊天服务器和 Web UI 不在同一个域中,因此我无法共享 cookie 以了解谁在连接。在他们的情况下,不需要将它们托管在两个不同的地方,所以我将它们合并,让 Express 为 UI 提供服务,然后当客户端在强制断开连接后浮出水面时,我会查看他们的用户 ID cookie,将它们与我在服务器上跟踪的它们所在的房间匹配,然后重新加入它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-13
      • 2017-05-10
      • 2019-06-25
      • 2019-03-02
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多