问题标签 [signaling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - 处理不同威胁的异步 TX/RX 串行端口的最佳方法
使用以下方法从串行端口读取数据时遇到问题,该方法由访问同一串行端口的两个线程组成。
虽然 tx 线程工作可靠,但始终有数据要发送,如果应用程序启动后不久数据不存在(RX/接收),则 rx 不起作用
两个线程具有相似的结构来使用“选择”来传输或接收数据。任何进一步调试的建议,为什么选择不能随着时间的推移接收数据。
php - webrtc 在基于 php 的页面中带有 node.js
我有一个网站,我想在这个项目中添加一些 webrtc 功能。我正在使用 node.js 的 sockect.io 来发送信号。页面已用 php 编码。用户登录他们的帐户并开始回答问题。我希望网站管理员能够控制用户使用他们的网络摄像头。所以我想使用 webrtc 和 node.js socket.io 添加这个功能...但是由于 node.js 和 Apache 不能同时在端口 80 中运行所以我不知道如何组合这些功能.. ...任何人都没有任何想法来克服这个问题?
bash - exec 作为管道组件
对于我们在容器内运行的应用程序,最好在容器(正常)关闭时接收 SIGTERM。同时,我们希望它的输出进入日志文件。
因此,在我们的 docker 容器的启动脚本中,我们一直在使用 bashexec
与此类似
这工作得很好,command
替换了作为容器根进程并接收 SIGTERM 的 shell。
由于应用程序倾向于记录大量日志,我们决定使用 Apache 的rotatelogs
工具添加日志轮换,即
唉,似乎通过使用管道, exec 不能再command
更换外壳了。用 来查看正在运行的容器中的进程时pstree -p
,现在看起来像这样
所以 bash 仍然是根进程,并且不会将 SIGTERM 传递给命令。在偶然发现 exec 之前,我发现了一种将信号处理程序安装到 bash 脚本中的方法,然后它本身会command
使用kill
. 然而,这变得非常复杂,获取 PID 也并不总是那么简单,我想在信号处理和获取管道以进行日志轮换时保留 exec 的便利性。知道如何做到这一点吗?
javascript - 使用相同的连接 ID 发出信号 r 客户端重新连接
我的应用程序出现信号问题,我正在使用signar R,有时我的应用程序失去了连接,所以我尝试重新连接。问题是我需要使用我的第一个连接 ID 重新连接,但服务器为我的新连接返回另一个 ID。这是我的代码
我想用我的第一个连接 ID 进行另一个会话,请提供任何帮助。
spring-boot - 管理每个套接字消息的数据库调用 Spring Boot
我有一个 spring boot 应用程序 web-socket 服务器作为 WEBRTC 信令服务器启动并运行。
该服务器必须根据从/向服务器旋转的消息,通过不同的客户端套接字将一些数据记录到数据库中。
在尝试使用超过 2 个对等方从客户端进行电话会议,并将信号作为带断点的调试器运行时,该场景成功完成,数据库按预期更新,电话会议发生。
但是,如果我在没有调试和断点的情况下运行服务器,则会出现 sql 错误
我正在使用 Spring JPA 并在填充实体数据及其所有嵌套列表和关系实体对象后对 web-socket 接收到的每条消息调用保存函数,以保留调用流的数据。
我认为该错误是因为查询在数据库上以随机顺序同时运行,而数据库中仍然没有数据可以采取行动。
与调试模式一样,我需要时间从一个断点移动到另一个断点,这是为了确保数据持久性。
但我并不完全确定这个问题。
是否有一种最佳方式来应用并发数据库调用和更新,并确保数据在数据库中正确保存和持久化,以用于并发 web-socket 相关消息?
javascript - 存储 WebRTC 连接以供以后使用的正确方法是什么?
我正在使用 WebRTC 和 IndexedDB 实现分布式哈希表,但遇到了一个我无法找到正确解决方案的问题。我有一个用于探索 WebRTC 的简单应用程序,并且我成功地通过数据通道发送数据。
为每个保存的节点保持连接是不可能的,但每次都重新发出信号也很麻烦。通常为此,您只需保存 IP、端口和 ID,但 WebRTC 需要的不止这些;下面是我用来尝试检索连接的代码,来自上一个会话的信息存储在“会话”对象中:
这实际上有效,但它会导致一些错误,我担心这些错误可能表明存在问题。其中第一个发生在两端:
InvalidStateError: Cannot set remote answer in state stable
第二个只发生在提供方面,在我的测试中:
InvalidStateError: Cannot add ICE candidate when there is no remote SDP
出于某种原因,如果我根本不提出要约或回答,而只是恢复候选人,数据流甚至可以正常工作;这种情况下的错误是双方的后一个错误。
这里发生了什么?我需要担心它,还是我可以继续努力?作为一个附带问题,这是解决这个问题的一种愚蠢的方法,显然是错过了替代方案吗?
编辑:根据这些错误,我现在还尝试了多种重新排序这些步骤的方法,并且没有得到太多的结果;但是,这种方法确实允许重新连接真正的连接,并且即使我更改手机上的网络也不会导致信号问题,因此我将继续测试这种方法的局限性。不过,我仍然想知道导致这些错误的确切原因,因为它们似乎并不一定表明它们似乎表明了什么。
flutter - WebRTC setRemoteDescription Session 在 Flutter 中为 Null 错误
所以,我正在尝试编写一个 webRTC 移动应用程序。发现了一些错误。
因此,在我的手机代码中,将创建一个报价并将其存储在 Firestore 中。
dmeet->(AUTO ID)->sdp->offersdp->sdp:sdpvaluesStored
所以在那之后我在加入按钮中手动给出了documentId,当我尝试获取offersdp并设置远程描述时。我想出了一些错误
我正在使用教程代码,它使用相同的概念,我将在文本框中粘贴 sdp 并设置远程描述,教程代码在这里
firebase - 不同设备上的 WebRTC(仅在一个浏览器中工作)
我对 WebRTC 有一个奇怪的问题,我不知道如何解决。我正在使用 firebase 创建一个 WebRTC webgl 游戏,用于收集答案和提议以及 ICE 候选人。我使用谷歌眩晕服务器和我自己的转服务器。当我通过在不同浏览器的多个选项卡中运行多个游戏实例在我的计算机上进行测试时,连接通常可以正常工作。当我通过在我的电脑和笔记本电脑上运行游戏进行测试时,在 Firefox 浏览器中,游戏相互连接。但是,当我在其他浏览器(Chrome 和 Edge)中启动它时,游戏无法连接。ICE 候选人交换,setRemoteDescription 发生并且......就是这样。没有连接,没有数据通道创建。
我在这个话题上失去了几天。它以前在Firefox上不起作用。我认为turn server 可以完全解决从不同设备连接的问题,但只解决了一个浏览器。会是什么呢?
c++ - 如何在不需要 if 测试的情况下让 C++ signalling_nan() 抛出异常?
如果在设置之前使用其值将在初始化后设置的变量,我正在尝试使用signaling_nan() 自动引发异常。
我已经尝试通过 fenv.h 使用浮点异常功能,但是该解决方案需要对 FE_INVALID 进行 if 测试,我想避免这种情况。
我在下面包含了一个简化的示例代码。在代码中,我有一个带有成员 double x 的类 A,我在构造函数中将其初始化为 signalling_nan()。该类还包括一个函数divide_by_x,它将类成员x传入的参数相除。我创建了一个对象 A a1,并调用 a1.divide_by_x(10.0)。我预计程序会引发异常,但它会继续并返回 nan 作为 divide_by_x 函数调用的值。
在示例代码中,我在程序末尾包含了一个针对 FE_INVALID 浮点异常的 if 测试,如果 x 使用 quiet_nan() [Not invalid] 与 signalling_nan() [FE_INVALID] . 这表明signaling_nan()确实产生了一个浮点异常,但是程序继续执行。
用signaling_nan()初始化x的输出:
FE_INVALID
使用 quiet_nan() 初始化 x 的输出:
不无效
javascript - “信号状态改变”事件如何在 webRTC 连接中起作用?
我正在努力在用户之间进行简单的 webRTC 文本通信。我的设计是在用户通过信令服务器登录时创建一个 RTCpeerconnection。之后,每当任何用户想要与其他用户创建聊天时,他们都可以通过信令服务器发送提议并相互回答。这可以通过信令服务器来实现。以下是我目前用于报价的一段代码。
提供创作者
在以下场景中,我在创建报价时遇到了问题。
设想:
错误
我收到错误消息InvalidStateError: Cannot create offer in have-remote-offer
(我正在使用Firefox
浏览器)
之后,我研究了 RTCpeerConnection 信令状态。现在我已经明白调用setLocalDescription
(或setRemoteDescription
)将更signaling state
改为"have-local-offer"
(或"have-remote-offer"
)。
现在在我的情况下,如果用户 A 向用户 B 发送报价并且用户 B 拒绝它。然后用户 A 仍处于“有远程报价”状态。所以在状态改变之前,任何其他用户都不能提供新的报价。
所以现在我想知道如何使用相同的 RTCpeerconnection 为新报价做出或强制signaling state
执行stable
。closed
peerConnection.signalingState = 'closed';
当用户拒绝报价时,我可以强行喜欢吗?有什么建议吗?如果我的理解有误,请纠正我。