关于信令过程的任何资源

时间:2013-07-02 02:08:24

标签: socket.io signaling

我正在使用Socket.io来实现一个信令过程,比如连接,调用,回答,拒绝等等,还有onUserCalling,onUserRejected等......

我不知道处理所有状态的最佳方式是什么,例如,如果A正在呼叫B,那时A的状态将设置为“呼叫”,B的状态将为“onUserCalling”。所以在平均而C可以打电话也不打A,因为他们的状态不是“可用的”。

但是当事情变得复杂时,很难控制状态。

所有人都知道关于这个问题的好材料/博客文章/模式吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

听起来你正在寻找state machine。你可以在状态机上做很多阅读,但基本上它们代表的是一个可以在任何一个状态之一的东西;可以通过在机器上触发相应的事件来更改机器的状态。

在您的情况下,callingonUserCallingcallanswerreject等。是事件。通过将其表示为状态机,您可以根据事件跟踪用户所处的状态以及他们可以转换到的状态。

例如,here is some code on Plunker that demonstrates such a state machine。 (忽略用户界面交互是使用AngularJS构建的事实。)状态机是通过名为JavaScript State Machine的库定义的,并且定义如下:

StateMachine.create({
  initial: 'ready',
  events: [
    { name: 'placeCall',    from: 'ready',               to: 'calling' },
    { name: 'receiveCall',  from: 'ready',               to: 'callWaiting' },
    { name: 'callAnswered', from: 'calling',             to: 'inCall' },
    { name: 'callRejected', from: 'calling',             to: 'ready' },
    { name: 'answerCall',   from: 'callWaiting',         to: 'inCall' },
    { name: 'rejectCall',   from: 'callWaiting',         to: 'ready' },
    { name: 'hangUp',       from: ['calling', 'inCall'], to: 'ready' }
  ]
});

这表示当计算机处于ready状态时,我们可以触发placeCall事件来更改状态calling,或者我们可以触发receiveCall事件将状态更改为callWaiting。状态更改为calling后,我们可以分别通过触发inCallready事件移至callAnswered州或返回callRejected

状态机库可以查看事件定义,并根据机器的当前状态告诉您允许触发哪些事件。在这个例子中,我使用它来只启用将触发允许事件的按钮。

大多数状态机库,包括我在这里使用的JavaScript,允许您在进入或离开某些事件时提供回调;此特定库还允许异步事件转换,这在使用具有异步Node.js代码的库时可能会有所帮助。您可以找到更多信息in the readme