问题标签 [ws]
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.
javascript - 通过 Node.js ws websockets 中的某个通道发送消息
我想使用 websockets 在前端和后端之间创建双向通信。我正在使用 Node.js ws。使用
我可以使用我称之为“消息”标签的方式向所有客户发送消息。使用 Chrome 开发人员工具,我可以看到发送了一个带有 ON_MESSAGE 事件的 ws 数据包。
我想使用另一种标签,但是我找不到有关如何执行此操作的文档,也找不到任何可以解释执行此操作的方法的内容。我尝试了以下类似的方法,但没有成功。
node.js - 如何使用 websockets/ws lib 限制 Websocket 连接的数量?
我想将最大 WS 连接数硬限制为 100。我正在编写一个 node.js 服务器,我不应该允许超过 100 个连接。
如何在不触及系统ulimit的情况下限制 Websocket 连接数?
express - 服务器发送事件和 Ajax VS Websockets 和 Ajax
我正在创建一个应用程序( ),但在确定将数据发送到 API( )和检索实时更新Nuxtjs
的好方法时遇到了麻烦。expressjs
看来我可以使用两个协议 [Server Sent Events( SSE
) 和Axios
/或 Websocket( WS
)] 创建“bi-di”连接。
这两种技术都适用于大多数浏览器,所以我认为不需要添加额外的库,例如socket.io
- 对于那些没有当前浏览器的人(太糟糕了)。
该应用程序基于表单数据/点击的用户输入。然后用该信息通知/更新其他用户。在这一点上,用户可以响应并且链继续(基本的聊天,如流程,一些信息将被快速交换,而有些可能不会或永远不会)。
以我的经验,用户流将更多地依赖于侦听更改而不是实际更改数据 - 因此我正在考虑SSE
。不幸的是,这两种协议都有其缺陷。
网络套接字:
- 并非所有组件都需要
WS
获取/发布信息,因此以额外的服务器费用升级基本 http 连接是没有意义的。因此需要另一种方法WS
(Axios/SSR
)。Example: Checking to see if a user name exists
- 安全防火墙可能会阻止
WS
正常运行 express-ws
使 API 端的套接字变得简单- 我相信一个用户可以拥有超过 6 个并发连接(可能是赞成和反对)
服务器发送事件
- 似乎技术正在衰落,有利于
WS
- 监听事件似乎和监听事件一样简单
WS
- 无需升级连接,但必须
node-spdy
在API 中使用 -由于多路复用expressjs
,这也可能是一个很好的实现WS
- 更多的后端代码来设置
http2
和发出SSE
s(丑陋的代码也是如此 - 所以将制作函数) - 仅限于 HTTP 限制(6 个并发连接),这是一个问题,因为用户可以轻松地将其最大化(即打开多个聊天窗口)
TLDR
该应用程序将更加以“供稿”为导向,偶尔发布(可由 处理Axios
)。但是,用户将收听多个“提要”,HTTP 限制将成为问题。我不知道解决方案是什么,因为SSE
似乎是更好的选择,因为我不需要不断握手。如果这次握手真的无关紧要(从我读过的所有内容来看并非如此),那么WS
可能是一个更好的选择。不幸的是,关于这两者的信息有太多相互矛盾的信息。
想法?
wcf - 带有 TransportWithMessageCredential 的 WCF 是否使用 SSL?
我正在客户端和服务器之间的 Intranet 中配置 WCF 服务。
我已经为带有 TransportWithMessageCredentia 的 wsHttpBinding 设置了它,但没有证书身份验证。
我是否更正了该服务现在使用 ssl/tls 并加密消息?
这是安全的还是我也需要使用证书?
javascript - nodejs ws 库——如何防止暴力攻击(密码和崩溃)
我正在尝试使用 NodeJS 制作一个应用程序,该应用程序在很大程度上取决于用户通过浏览器中的典型 WebSocket 协议连接到它,我在 nodeJS 中为此使用 ws 库。
实际的应用程序工作正常,我可以断开任何用户(如果我可以检测到当前 IP 地址已经连接),并使用用户名和密码授权它(所有在服务器端处理,之后他们通过 websocket 发送用户名和密码,我什至可以在服务器端设置一个计时器,以防止客户端强制服务器尝试使用用户名和密码进行授权);但是,我还没有找到一种方法来阻止连接发生。
我的意思是什么?例如,在客户端,某人可以打开他们的 javascript 控制台并简单地输入如下内容:
并简单地让它继续下去,很快整个服务器将完全被封锁和/或因来自同一客户端的大量持续连接而崩溃。
所以,虽然我可以在用户尝试连接后断开连接(例如,如果我检测到它已经连接到同一个 IP 地址),但是我怎样才能阻止某人简单地发送持续连接和/或命令喜欢上面的代码?如何从一开始就完全阻止整个 IP 地址打开任何新连接?
java - 使用 Jersey 的 Java 服务不会部署到 Jboss
我正在尝试构建其他服务可以调用的 Java 服务。该服务不是 WS,而是调用 RestfulWS。
我真的只是围绕这个调用构建一个包装器。这将找到它需要的正确数据,为调用设置 JSON。获得响应并将其发送回来。
被告知为此使用泽西岛。尝试设置所有 pom.xml 以使用 Jersey。
构建代码工作正常,当部署到服务器时发生故障。我收到错误消息——“JBAS011232:只允许一个 JAX-RS 应用程序类。”
我没有 web.xml,我猜它是用来跳过一些 ResetEasy 文件的。我在 pom.xml 和 jboss-deployment-structure.xml 中有排除项。
部署发生时我仍然收到错误消息。不太确定还要检查什么。
javascript - ws 库连接翻倍
我有一个连接问题,我有一个快速服务器并创建一个ws
传递快速服务器实例的实例,当我连接时,连接成功并尝试发送一条消息我可以收到一次消息,当我关闭连接并连接时然后再发送一条消息,消息现在发送两次,每次继续这样做,消息保持加倍,我在通道上的套接字只是一个连接,我认为它创建了一个新的过程?我怎样才能防止这种行为?
node.js - Nginx 子文件夹中的 Node.js 应用程序与 WSS 连接到同一服务器
在 Apache 服务器上管理我的 Web 项目多年后,我不得不使用 Nginx 将它们移动到新服务器上。我已经成功地迁移了所有这些,除了使用 websockets 的那个。
该项目是一个基于 web 的扫雷器,使用 websockets 与游戏服务器进行通信。该游戏可通过https://www.my.domain.com/minesweeper访问。在其 client.js 文件中,连接是通过行建立的const ws = new WebSocket('wss://www.my.domain.com:8081/')
。
服务器使用ws包,这是 server.js 文件的摘录,位于 web 文件夹之外:
游戏在以前的服务器上使用此配置,但我不记得是否必须编辑 Apache conf 文件才能使其工作。
现在,在新服务器上,我有以下配置文件:
如果没有任何附加配置,当我尝试通过其 URL 访问游戏时,websocket 请求不会返回预期的 101 响应代码。Firefox 还会触发“无法建立与 wss://www.my.domain.com:8081 的连接”错误。
基于关于 websockets 的官方 Nginx 教程和关于类似问题的其他 SO 答案,我尝试使用 proxy_* 参数的多种组合来编辑我的 Nginx 配置,但没有成功。
但是基于 websocket 服务器和 Nginx 服务器在同一个 IP 上的事实,并且 websocket 服务器正在监听 8081 端口,Nginx 服务器是否也应该监听 8081 服务器(如果我将配置编辑为这样做,Nginx 拒绝重新启动,因为 websocket 服务器已经在该端口上侦听,并且相反)?Nginx 真的是问题还是我错过了另一件事?
提前致谢 !
c# - C# WebSockets-Sharp WebSocketSharpException:“无法从流中读取帧头”
我有一个可视化 C# 应用程序,它通过 WebSocket 连接到使用 Heroku 部署的远程 Node.js 服务器。
服务器使用 npm WebSocket 模块“ws”来创建一个 WebSocket-Server。
C# 客户端应用程序使用此 GitHub 存储库中的 WebSocketSharp 库:https ://github.com/sta/websocket-sharp创建连接到服务器的 WebSocket-Client。
这是必要的节点服务器 server.js 代码:
这是节点服务器 ApiHandler.js 代码
这是必要的 C# 客户端应用程序代码
所以它的工作原理是,当客户端更新服务器上的信息时,它会将更新的信息发送到服务器,然后服务器将更新的信息发送给除发送者之外的所有客户端。
当客户端从服务器接收到更新的信息时,它们会更新其本地副本以匹配从服务器接收到的数据。
问题是在客户端通过 WebSocket 连接到服务器大约一分钟后,客户端抛出 WebSocketException 并显示消息“无法从流中读取帧的标头”。
快速的谷歌搜索将我带到这个 GitHub 问题https://github.com/sta/websocket-sharp/issues/202。从上述链接:
“我们通过在 Ext.cs 中修改 ReadBytesAsync(this Stream stream, int length, Action completed, Action error) 设法完全修复它。我们注意到即使没有连接,'NetworkStream.EndRead' 也可以返回零 (0) 字节关闭。仔细阅读“EndRead”的文档只说当连接关闭时返回零字节。其他方式并不总是正确的,接收 0 字节并不总是意味着连接似乎正在关闭。这很常见即使连接没有关闭,也会返回零字节。在 Chrome 中偶尔会发生一次,而在 Firefox 中似乎更常见。因此,将:替换
if (nread == 0 || nread == length)
为:
if(nread == length)
修复了问题。它确保当一个人在等待时两个帧字节一个真的得到两个字节。“。
但是在检查 WebSocket-Sharp 库中的代码时,上面引用的修复程序已经应用于库(该帖子来自 2016 年,因此它可能已被路径)。
2020年图书馆的代码:
另一个奇怪的事情是,当我在本地运行服务器并连接到它时,这个问题永远不会发生。只有当我连接到部署在 Heroku 上的远程副本时才会发生这种情况。