问题标签 [starscream]

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.

0 投票
0 回答
123 浏览

ios - 如何使用以“HTTPS”协议开头的 url 作为 Starscream 中的 WebSocket url?

我正在使用 Starscream Web Socket 库。要创建网络套接字,我的 url 以 HTTPS 开头。但是红蜘蛛使用“ws & wss”协议作为套接字。我该如何解决这个问题?大多数套接字 url 以wswss开头。但我的网址看起来像

https://example.com:8034/socket.io/socket.io.js

我想将此 url 设置为 Socket url。但是不知道怎么做?

0 投票
0 回答
769 浏览

ios - 如何将 Starscream iOS 客户端连接到 Java 网络服务器

我正在使用正确的 WebSocketHandler() 运行 Spring Boot v2.2。我确信服务器是正确的,因为当我访问http://websocket.org/echo.html并尝试连接到我们的服务器时,我们可以验证服务器和浏览器客户端上的连接。

但是,在 iOS 中(我在 2 个模拟器上进行测试 - iOS 12 和 iOS 13.3),我无法连接。我现在正在尝试使用红蜘蛛。(尝试使用 Socket.io 会导致无法解决的问题,而尝试使用 SocketRocket 会导致问题只是让它在 iOS 13.3 上构建。)

我现在面临的问题是,Starscream 在尝试连接到我们的 java 服务器的地址(ws://127.0.0.1:8080/socket)时只是默默地失败了。当我说静默失败时,我的意思是客户端或服务器上没有任何反应表明存在错误,但通过调试我可以看到我们的 iOS 套接字上的 isConnected = false 。

为了尝试解决此问题,我尝试过:

  • 添加App Transport Security Settings -> Allow Arbitrary Loads = YESInfo.plist。
  • 添加NSExceptionDomains -> NSExceptionAllowsInsecureHTTPLoads = YESInfo.plist。
  • 同时使用 localhost 和 127.0.0.1,同时使用/socketor/和 HTTP 而不是 ws/wss。
  • 我什至能够使用原生 Swift 通过 GET 请求有效地查询 google.com。

我对问题可能是什么感到非常迷茫。我究竟做错了什么?

0 投票
0 回答
133 浏览

swift - Websocket 可以同时读/写吗?

websocket客户端连接是否有可能在接收大量数据块的同时向服务器发送数据?

0 投票
1 回答
287 浏览

ios - Websockets 只收到 PONG 响应

我已经在我的应用程序中实现了用于 websocket 通信的SocketRocket,但是由于这个库太旧并且现在已经存档,我们决定实现似乎是值得信赖的StarScream 。

但是,在我从SocketRocket => StarScream迁移之后,我发现PONG我的 websocket 只收到了响应,而其他请求没有得到响应。

有人会在这里帮我找到问题或纠正我吗?

这是我的SocketRocket 实现,即使在当前的实时生产应用程序中,我的 websocket 也可以正常工作。

这是我的StarScream 实现,即使使用生产配置也无法工作,我对两个应用程序使用相同的生产配置,但 SocketRocket 在 StarScream 失败时工作。

如果你检查代码,你会发现这两个实现有很多相似之处,即使我没有收到对 StarScream 实现的正确响应。我尝试每 2 秒发送一次 ping 请求以获得PONG响应,但我也会在auth连接套接字后发送请求,而在 SocketRocket 中我从未收到任何响应,但我确实收到了身份验证请求的响应。

  • connectSocket() 是创建套接字的函数。请暂时忽略 connectQuickStashSocket(),因为我已经暂时评论了它。

  • sendPing() 现在也被省略了,因为我必须检查 auth 的响应,因此,每 2 秒注释一次 sendPing() 调用。

  • send() 是在套接字上写入数据的主要函数,一旦写入数据,我也会收到完成回调,但我仍然没有得到任何响应。

注意:评论/取消评论sendPing()connectQuickStashSocket()不会改变响应和代码行为相同。

在这里,我附上了 SocketRocket 的日志,您将在其中看到所有请求/响应工作正常:

这是 StarScream 的日志,其中仅PONG接收到auth请求的响应,但未接收到请求的响应,它仅显示作为请求写入的数据:

请在这里建议我我能做什么以及如何跟踪实际问题。

0 投票
1 回答
150 浏览

swift - 即使使用 objectWillChange,ObservableObject 文本也不会更新 - 多个类

我目前正在编写一个实用程序,作为其中的一部分,接收一个字符串(通过 WebSockets 和 Starscream 库),然后将字符串值显示在 SwiftUI 视图(名为 ReadingsView)中。

代码的结构如下 - 有两个类,管理 WebSocket 连接的 WSManager 类和具有 ObservableObject 属性的 GetReadings 类,它管理和存储读数。

当使用 WSManager 类中的 didReceive 方法接收到字符串时,它被 WSManager 类中的 decodeText 方法解码,然后调用 GetReadings 类中的 parseReceivedStrings 方法。

解析值时,我希望 ReadingsView 中的值会立即更新,因为我已将变量标记为 @Published,并使用 objectWillChange 属性手动推送更改。willSet 参数中的打印语句反映了新值,但文本不会更新。在 ReadingsView 代码中,我通过在按下刷新按钮时手动调用 parseReceivedString 方法来弥补这一点(这用作 WebSocket 协议的一部分来发送请求),但这会导致读数落后于它们的位置应该。理想情况下,我希望读数在用上一段中描述的方法解析后立即更新。

我想知道我是否使用了正确的声明,或者我尝试做的是否与使用多个类不兼容——这是我第一次使用 SwiftUI,所以我可能会遗漏一些细微差别。提前谢谢你的帮助。

编辑 - 添加代码

内容视图

0 投票
1 回答
349 浏览

ios - 我可以将 SwiftNIO 客户端 websocket 与不同的服务器 websocket 一起使用吗?

我是 WebSocket 的新手,在https://github.com/daltoniam/Starscream和 SwiftNIO 之间进行选择,

使用 SwiftNIO 找不到明确的指导方针,我可以在 iOS 中只使用 SwiftNIO 客户端 WebSocket。WebSocket 服务器将使用不同的 Web 技术(Java 或 Spring websocket)实现?或者如果我使用 SwiftNIO 开发客户端,服务器是否也必须使用 SwiftNIO 构建?

我的应用程序是 iOS 10 及更高版本,所以我不能使用苹果 WebSocket API(>ios13)

提前致谢。

0 投票
0 回答
599 浏览

ios - didReceive(event: WebSocketEvent, client: WebSocket) 没有在套接字上调用?.write(string: Starscream 中的方法

我在我的聊天应用程序中使用了最新版本的 Starscream 软件包。请查看我的代码片段:-

输出 :-

websocket已连接:[“Via”:“kong/0.34-1-enterprise-edition”,“Connection”:“Upgrade”,“Server”:“nginx/1.15.6”,“Content-Type”:“text/普通;charset=UTF-8","Strict-Transport-Security":"max-age=15724800;includeSubDomains","X-RateLimit-Remaining-20":"499","Access-Control-Expose-Headers" :“X-Auth-Token”,“X-Kong-Upstream-Latency”:“375”,“X-RateLimit-Limit-20”:“500”,“升级”:“websocket”,“X-Kong-代理延迟”:“386”,“日期”:“2020 年 7 月 30 日星期四 14:28:18 GMT”,“Sec-WebSocket-Protocol”:“Q6ZzGUo8q9Tta5QM0jKiZOJ03aQ3ZS”,“Sec-WebSocket-Accept”:“mkPgQAVeipWtSB+6t7soZQKWXW4=", "访问控制允许凭据": "true"]

之后我发送消息:-

它没有返回到 didReceive 事件。

我的 api 和预期的响应:=

网址:wss://dev.api.deepak.com/tools/cognitive/channel/web/client 标头:Sec-WebSocket-Protocol:Q6ZzGUo8q9Tta5QM0jKiZOJ03aQ3ZS

会话开始消息:

请求:{"request_type":"start","bot_id":10}

响应:{"session_id":"1595350205841-86807685-dbc3","status":"success","re​​quest_type":"start"}

你能指导我我做错了什么吗?

0 投票
1 回答
121 浏览

ios - Swift 无法使用类型为 '(url: URL) 的参数列表调用类型为 'WebSocket' 的初始化程序

我在 swift 中有以下代码用于 web-socket 通信,但是当我构建代码时出现错误。

代码:

错误:

Cannot invoke initializer for type 'WebSocket' with an argument list of type '(url: URL)'

可能是什么问题呢。

0 投票
0 回答
120 浏览

swift - Web 套接字使用 https 而不是 ws 或 wss 的 Swift 解决方案?

我正在尝试打开与不断流式传输 JSON 对象的 url 的连接(每行 1 个)

目前数据如下:

据我了解,有效的 json 将是:

我认为网络套接字是要走的路,但网址是 https 而不是 ws 或 wss 就像我一直在挖掘的所有教程一直在使用的那样。

有没有办法将 https 转换为 wss 或者我可以通过其他方式来完成相同的任务?

我尝试过使用 StarScream 和 SocketIO,但没有取得太大的成功。我在使用 https:// 时遇到了同样的问题

0 投票
0 回答
544 浏览

ios - iOS StarScream,WebSocket 有时不会在应用程序前台重新连接

这对我们来说是一个真正的脑筋急转弯

我们知道 iOS 在一段时间后会在后台关闭应用程序的 WebSocket 连接。

我们注意到,每次发生这种情况,并且应用程序返回前台时,我们的套接字委托都会收到websocketDidDisconnect消息。当一切正常时,我们很快就会得到websocketDidConnect消息。

这里的假设是 StarScream 正在处理前台的自动重新连接

但是,在一小部分情况下,客户端只websocketDidDisconnect在前台接收,但从不接收websocketDidConnect消息。

此外,我们尝试在前台手动确定此断开连接:

在套接字在前台备份的情况下,我们看到serverSocket.isConnected == true 但是在失败的情况下,我们看到serverSocket.isConnected == false,并且connect调用也没有像我们预期的那样重新连接套接字

有没有人见过这个,或者知道可能是什么问题?