【问题标题】:Node.js independent socket sessionsNode.js 独立套接字会话
【发布时间】:2017-05-09 12:11:18
【问题描述】:

我对使用 Node.js 很陌生,所以请原谅我的无知 :)

现在我有一个 Web 应用程序,它使用 Node/Angular/Express 来从服务器上的 DLL 调用 C++ 函数,并将结果返回给客户端。但是,我需要该应用支持多个用户。

我正在调用的 C++ 服务器函数根据 DLL 中定义的全局对象(可以修改)返回结果。问题是当有多个客户端访问 Web 应用时,在一个会话中修改全局对象会影响其他会话中正在访问的对象。

例子:

  • x 是服务器上 C++ DLL 中的一个对象
  • 用户 #1 将 x 设置为 5
  • 服务器返回 5 给用户 #1
  • 用户 #2 将 x 设置为 8
  • 服务器返回 8 给用户 #2
  • 用户 #1 要求 x 值
  • 服务器返回 8 给用户 #1(希望返回 5,因为从用户 #1 的角度来看,这是 x 的最新值)。

我的假设是我应该使用 Socket.IO 之类的东西(类似于基本教程 http://socket.io/get-started/chat/)。这能够指示用户何时连接到应用程序,但不能保持会话独立于用户的视角。

关于如何保持这些会话独立的任何想法?谢谢!

【问题讨论】:

  • 几乎唯一的方法是修复 DLL 不具有全局状态。
  • 如何管理用户会话?这仍然需要服务器上的套接字吗?
  • 不,您可以并且应该在没有任何 websocket 连接的情况下处理会话
  • 你会建议什么替代方案?

标签: c++ angularjs node.js sockets session


【解决方案1】:

这不是 node.js 的问题。 node.js 可以很好地执行会话(express-session 是使用 express 和 node.js 实现会话的一种非常流行的方式)。

这听起来像您有一个 DLL 一次只支持一个用户,这确实不适合多用户服务器使用。

虽然有一些非常丑陋的方法可以解决这个问题(例如为每个用户启动一个缓存和老化的单独子进程,以便每个子进程都有自己单独加载的 DLL 副本),但您真正需要的是一个 DLL不会将单个用户的状态保存在全局内存中,因此可以代表多个用户使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多