[英]Socket.io for swift4 ios
I am in trouble how to implement websocket function to my swift code. 我在如何对我的快速代码实现websocket功能时遇到麻烦。
I have completed a server implementation and another javascript client. 我已经完成了服务器实施和另一个javascript客户端。 They are working well.
他们工作得很好。 So, I believe websocket server is not wrong.
因此,我相信websocket服务器没有错。
But if I write the code in swift, it don't work. 但是,如果我迅速编写代码,那么它将无法正常工作。 No error happen and no message is shown on the console.
没有错误发生,并且控制台上未显示任何消息。
Here is my swift code. 这是我的快速代码。
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 = ""
}
}
}
}
I want to see "socket connected" message on my console when the app run. 应用运行时,我想在控制台上看到“ socket connected”消息。 I think the socket is something wrong.
我认为插座有问题。 But I have no idea what is wrong because no error message found.
但是我不知道哪里出了问题,因为没有发现错误消息。 And I doubt if I need some setting in my info.plist.
而且我怀疑我是否需要在info.plist中进行一些设置。 But, I don't make sense how to write.
但是,我没有道理怎么写。
Please give me some advice? 请给我一些建议吗?
socket.io-client-swift 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()
}
Update 更新
In your case: SocketManager: Manager is being released 在您的情况下: SocketManager:正在释放管理器
Sockets created through the manager are retained by the manager. 通过管理器创建的套接字由管理器保留。 So at the very least, a single strong reference to the manager must be maintained to keep sockets alive.
因此,至少必须维护对管理器的单个强烈引用才能使套接字保持活动状态。
["Got unknown error from server Welcome to socket.io."]
[“从服务器欢迎到socket.io,出现未知错误。”]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.