Socket.io for swift4 ios

我有问题如何实现websocket函数到我的swift代码。

我已经完成了服务器实现和另一个javascript客户端。 他们运作良好。 所以,我相信websocket服务器没有错。

但是如果我在swift中编写代码,它就不起作用了。 没有错误发生,控制台上没有显示任何消息。

这是我的快捷代码。

import UIKit import SocketIO class ChatViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { @IBOutlet weak var tableView: UITableView! var bottomView: ChatRoomInputView! var chats: [ChatEntity] = [] var socket: SocketIOClient! override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self // Initialize WebSocket let manager = SocketManager(socketURL: URL(string: "http://example.com:8081")!, config: [.log(true), .compress]) socket = manager.defaultSocket socket.on(clientEvent: .connect) {data, ack in print("socket connected") } socket.on("server_to_client") {[weak self] data, ack in print ("get Massage!!!") } socket.connect() socket.emit("join_room", with: [getRegistrationId()]) socket.emit("client_to_server", with: ["ack_client"]) setupUI() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } override var canBecomeFirstResponder: Bool { return true } override var inputAccessoryView: UIView? { return bottomView } func setupUI() { self.view.backgroundColor = UIColor(red: 113/255, green: 148/255, blue: 194/255, alpha: 1) tableView.backgroundColor = UIColor(red: 113/255, green: 148/255, blue: 194/255, alpha: 1) tableView.separatorColor = UIColor.clear tableView.estimatedRowHeight = 10000 tableView.rowHeight = UITableViewAutomaticDimension tableView.allowsSelection = false tableView.keyboardDismissMode = .interactive tableView.register(UINib(nibName: "YourChatViewCell", bundle: nil), forCellReuseIdentifier: "YourChat") tableView.register(UINib(nibName: "MyChatViewCell", bundle: nil), forCellReuseIdentifier: "MyChat") self.bottomView = ChatRoomInputView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 60)) bottomView.chatTextField.delegate = self bottomView.textSendButton.addTarget(self, action: #selector(self.chatTextSendButton(_:)), for: .touchUpInside) } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.chats.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let chat = self.chats[indexPath.row] if chat.isMyChat() { let cell = tableView.dequeueReusableCell(withIdentifier: "MyChat") as! MyChatViewCell cell.clipsToBounds = true // Todo: isRead cell.updateCell(text: chat.text, time: chat.time, isRead: true) return cell } else { let cell = tableView.dequeueReusableCell(withIdentifier: "YourChat") as! YourChatViewCell cell.clipsToBounds = true cell.updateCell(text: chat.text, time: chat.time, pic: RemoshinData.getDoctorPic()) return cell } } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print(indexPath) } func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { return 10 } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true } func textFieldShouldClear(_ textField: UITextField) -> Bool { return true } func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { textField.inputFieldBorderBottom(color: Utils.getColor(), x: textField.center.x, y: textField.center.y, w: textField.frame.size.width, h: textField.frame.size.height) bottomView.chatTextField = textField return true } func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { textField.inputFieldBorderBottom(color: UIColor.lightGray, x: textField.center.x, y: textField.center.y, w: textField.frame.size.width, h: textField.frame.size.height) return true } @objc func chatTextSendButton(_ sender: AnyObject) { let chatText = bottomView.chatTextField.text! if (chatText != "") { let _mainViewController = MainViewController() let jsonData = _mainViewController.sendChatText(_registration_id: getRegistrationId(), _chat_text: chatText) if(jsonData["status"].string! == "success") { socket.emit("client_to_server", with: ["update_chat"]) let chat = ChatEntity(text: jsonData["chat_text"].string!, time: "", userType: .I) chats.append(chat) tableView.reloadData() bottomView.chatTextField.text = "" } } } } 

我想在应用程序运行时在我的控制台上看到“socket connected”消息。 我认为socket是错误的。 但我不知道出了什么问题,因为没有找到错误信息。 我怀疑我的info.plist中是否需要一些设置。 但是,我怎么写都没有意义。

请给我一些建议?

socket.io-客户迅速

 var manager:SocketManager! var socketIOClient: SocketIOClient! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. ConnectToSocket() } func ConnectToSocket() { manager = SocketManager(socketURL: URL(string: "your url")!, config: [.log(true), .compress]) socketIOClient = manager.defaultSocket socketIOClient.on(clientEvent: .connect) {data, ack in print(data) print("socket connected") } socketIOClient.on(clientEvent: .error) { (data, eck) in print(data) print("socket error") } socketIOClient.on(clientEvent: .disconnect) { (data, eck) in print(data) print("socket disconnect") } socketIOClient.on(clientEvent: SocketClientEvent.reconnect) { (data, eck) in print(data) print("socket reconnect") } socketIOClient.connect() } 

更新

在您的情况下: SocketManager:Manager正在发布

通过管理器创建的套接字由管理器保留。 所以至少,必须保持对管理器的一个强引用,以保持套接字存活。

[“来自服务器的未知错误欢迎使用socket.io。”]

  1. 在服务器端和客户端检查socket.io版本,两者不匹配可能是导致此错误的原因
  2. 在info.plist(字典类型)和子键“允许任意加载”(布尔类型)中添加“应用程序传输安全设置”键,其值为YES。
Interesting Posts