从 Swift 中的 Socket 获取响应
Posted
技术标签:
【中文标题】从 Swift 中的 Socket 获取响应【英文标题】:Get Response from Socket in Swift 【发布时间】:2020-07-26 00:58:51 【问题描述】:我正在尝试将 Socket 集成到我的应用程序中以进行实时聊天。后端是在 node.js 上完成的,前端是在 React 上开发的,两者都运行良好。
我在我的 Swift 项目中添加套接字时遇到问题。
在下面的aaHandlers()
函数中,我希望得到一个 JSON 响应,其中包含 4 个用户的详细信息。它在 Web 应用程序中运行良好,但在 Swift 中却不行。我做得对吗?
这里是代码
import Foundation
import SocketIO
let manager = SocketManager(socketURL: URL(string: "https://chatsapi.dummyUrl.io")!, config: [.log(true), .compress])
let socket = manager.defaultSocket
let socketConnectionStatus = socket.status
class SocketIOManager: NSObject
static let sharedInstance = SocketIOManager()
override init()
super.init()
func addHandlers()
socket.on("get_all_user_list") (data, ack) in
print("KK get_all_user_list", data,ack) // this line never gets called. I tried putting breakpoints.
func establishConnection()
socket.connect()
func closeConnection()
socket.disconnect()
P.S:套接字已连接。
这是我在控制台中得到的:
> 2020-04-13 18:14:05.790193+0530 SocketTry[41289:9400138] LOG
> SocketIOClient/: Adding handler for event: get_all_user_list
【问题讨论】:
您可以在您的机器上本地安装一个最小的节点程序并从那里测试它 (npm install --save socket.io
),例如打电话给socket.emit('get_all_user_list', '<some json>');
。然后将 Swift 程序中的 URL 更改为 http://localhost:3000
。那它有用吗?
【参考方案1】:
请检查您是否在套接字中使用任何身份验证。如果您使用身份验证,则需要在您的 swift 代码中设置配置。 这里 AUTHTOKEN 是您从服务器的登录响应中收到的用户令牌。您从服务器的登录响应中收到的 AUTH_USER_ID。
class SocketIOManager: NSObject
static let sharedInstance = SocketIOManager()
override init()
super.init()
initialize()
func initialize()
let socketUrl = "https://chatsapi.dummyUrl.io"
let specs: SocketIOClientConfiguration = [
.log(true),
.connectParams(getConnectionParam())]
socketManager = SocketManager(socketURL: URL(string: socketUrl)!, config: specs)
socket = socketManager?.defaultSocket
func getConnectionParam() -> [String: Any]
return ["auth": "AUTHTOKEN", "user_id": "AUTH_USER_ID", "timeZone": "\(Date().localTimeZoneName)"]
func addHandlers()
socket.on("get_all_user_list") (data, ack) in
print("KK get_all_user_list", data,ack) // this line never gets called. I tried putting breakpoints.
func establishConnection()
socket.connect()
func closeConnection()
socket.disconnect()
【讨论】:
【参考方案2】:确保您在应用激活时已建立与服务器的连接。
func applicationDidBecomeActive(application: UIApplication)
SocketIOManager.sharedInstance.establishConnection()
还有一个重要的提示:每次服务器发送用户列表时,Socket.IO都会自动调用上面的socket.on(...)方法。 p>
【讨论】:
以上是关于从 Swift 中的 Socket 获取响应的主要内容,如果未能解决你的问题,请参考以下文章
PHP:如何从 JSON 中获取变量(从 Swift iOS 应用程序发送)并以 JSON 响应
如何从 iOS 应用程序中的 Node.js 服务器获取响应?