node.js - 如何将 swift 应用程序连接到套接字 io 服务器
问题描述
我正在尝试将我的 swift 应用程序连接到我的网络套接字后端。在我的后端,我使用的是 node、express 和 socket.io。我的服务器运行正常,我能够连接到它并使用我的 react web 应用程序中的 web 套接字。我正在努力快速实现相同的结果。我正在使用 socket.io-client-swift 库进行连接。我的服务器是安全的,我将用作https://test.api.com
我的地址。
我的反应应用程序中的套接字连接如下所示:
const socket = io('https://test.api.com', {
secure: true,
forceNew: true,
reconnectionAttempts: 'Infinity',
timeout: 30000,
transports: ['websocket']
})
我的快速连接代码如下所示:
class Socket: NSObject {
static let shared = Socket()
override init() {
super.init()
let manager = SocketManager(socketURL: URL(string: "https://test.api.com")!)
manager.setConfigs([.secure(true), .log(true)])
log.warning("Setting up socket connection")
let socket = manager.defaultSocket
socket.on(clientEvent: .connect) {data, ack in
log.warning("Socket connected")
}
log.warning("Connecting...")
socket.connect(timeoutAfter: 15) {
log.warning("Can't connect to socket server")
}
}
}
我的错误日志如下所示:
LOG SocketIOClient{/}: Handling event: statusChange with data: [connecting, 2]
LOG SocketIOClient{/}: Joining namespace /
LOG SocketManager: Tried connecting socket when engine isn't open. Connecting
LOG SocketManager: Adding engine
LOG SocketManager: Manager is being released
LOG SocketEngine: Starting engine. Server: https://test.api.com
LOG SocketIOClient{/}: Client is being released
LOG SocketEngine: Handshaking
LOG SocketEnginePolling: Doing polling GET https://test.api.com/socket.io/?transport=polling&b64=1
ERROR SocketEnginePolling: Error during long poll request
ERROR SocketEngine: Error
LOG SocketEngine: Engine is being released
我对套接字的服务器初始化如下所示:
// Add websocket
var allowedOrigins = "http://localhost:*";
const socketConfig = {
origins: allowedOrigins,
pingTimeout: 60000
}
io = require('socket.io')(server, socketConfig);
解决方案
我弄清楚了这个问题。在服务器上,我只允许 localhost 在套接字配置中。这适用于在本地运行的 react 应用程序。当我删除起源时,一切正常。套接字服务器初始化如下所示:
// Add websocket
var allowedOrigins = "http://localhost:*";
const socketConfig = {
// origins: allowedOrigins, -- Removed this line
pingTimeout: 60000
}
io = require('socket.io')(server, socketConfig);
推荐阅读
- mysql - 使用 Powershell 针对 MySQL 运行 MySql 存储过程脚本
- sql - Oracle IOT 将 count(1) 设为 0,即使其中包含条目
- php - 添加相关实体的更好方法
- javascript - 如何使用 JavaScript 在 HTML 中的 TextArea 内获取文本宽度和高度?
- generics - 用于 Void 和 value 的 Kotlin 泛型
- java - 引用另一个类的对象
- c# - 我无法在控制器中启动参数化构造函数 - ASP.NET MVC EPiServer
- ubuntu - Ubuntu为代理设置环境变量
- java - JOption 上的变量显示 2 次
- javascript - 如何修改 CakePHP 3.6 中的默认日期选择器?