我在如何对我的快速代码实现websocket功能时遇到麻烦。
我已经完成了服务器实施和另一个javascript客户端。他们工作得很好。因此,我相信websocket服务器没有错。
但是,如果我迅速编写代码,那是行不通的。没有错误发生,并且控制台上未显示任何消息。
这是我的快速代码。
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”消息。我认为插座有问题。但是我不知道哪里出了问题,因为没有发现错误消息。而且我怀疑我是否需要在info.plist中进行一些设置。但是,我没有道理怎么写。
请给我一些建议吗?
socket.io-client-swift
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:正在释放管理器
通过管理器创建的套接字由管理器保留。因此,至少必须维护对管理器的单个强引用,以使套接字保持活动状态。
[“从服务器欢迎到socket.io,出现未知错误。”]