确认通过socket发送的数据已经被服务器接收
Confirm data sent through socket had been received in the server
我在我的 android 应用程序中定义了 websocket,如下所示:
package com.oryx.geoop
import android.content.Context
import androidx.lifecycle.MutableLiveData
import org.java_websocket.client.WebSocketClient
import org.java_websocket.handshake.ServerHandshake
import java.lang.Exception
import java.net.URI
lateinit var mWebSocketClient: WebSocketClient
class SocketClient {
val uri = URI("ws://10.0.2.2:8080/ws")
val message = MutableLiveData<String>()
fun connectWebSocket(context: Context) {
// Setup stuff
mWebSocketClient = object : WebSocketClient(uri) {
override fun onError(ex: Exception?) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onOpen(serverHandshake: ServerHandshake) {
// Opened do some stuff
}
override fun onMessage(s: String) {
message.postValue(s)
}
}
mWebSocketClient.connect()
}
}
在检查套接字是否打开后,我使用它向服务器发送数据,如下所示:
if (mWebSocketClient.isOpen) {
mWebSocketClient.send(jObj.toString())
} else {
client.connectWebSocket(p0)
mWebSocketClient.send(data)
}
但仍有疑问,因为连接可能在中间某处被切断,因此需要服务器向 android 应用发回确认信息。
我怎样才能让应用程序理解从服务器返回的消息作为接收手机本身发送的数据的确认。
假设从服务器发回的消息是 "confirmed, $data"
您向服务器发送的每条消息,服务器都可以轻松发回确认消息。方法名称取决于您使用的服务器堆栈。大多数情况下,它类似于 client.sendMessage(yourMessage)
现在,让我们回答您在评论部分提出的问题。
How can I make the android app understand this msg is a confirmation
one, not a normal one ?
无需传递原始文本,您可以在 JSON
中进行通信
例如,
您可以发送以下格式的正常回复
{
"type": "NORMAL",
"id": "someUniqueIdOfTheMessage",
"message": "This is some normal message"
}
为了确认,服务器可以发回这样的东西
{
"type": "CONFIRMATION",
"id": "someUniqueIdOfTheMessage"
}
我在我的 android 应用程序中定义了 websocket,如下所示:
package com.oryx.geoop
import android.content.Context
import androidx.lifecycle.MutableLiveData
import org.java_websocket.client.WebSocketClient
import org.java_websocket.handshake.ServerHandshake
import java.lang.Exception
import java.net.URI
lateinit var mWebSocketClient: WebSocketClient
class SocketClient {
val uri = URI("ws://10.0.2.2:8080/ws")
val message = MutableLiveData<String>()
fun connectWebSocket(context: Context) {
// Setup stuff
mWebSocketClient = object : WebSocketClient(uri) {
override fun onError(ex: Exception?) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onClose(code: Int, reason: String?, remote: Boolean) {
// TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onOpen(serverHandshake: ServerHandshake) {
// Opened do some stuff
}
override fun onMessage(s: String) {
message.postValue(s)
}
}
mWebSocketClient.connect()
}
}
在检查套接字是否打开后,我使用它向服务器发送数据,如下所示:
if (mWebSocketClient.isOpen) {
mWebSocketClient.send(jObj.toString())
} else {
client.connectWebSocket(p0)
mWebSocketClient.send(data)
}
但仍有疑问,因为连接可能在中间某处被切断,因此需要服务器向 android 应用发回确认信息。
我怎样才能让应用程序理解从服务器返回的消息作为接收手机本身发送的数据的确认。
假设从服务器发回的消息是 "confirmed, $data"
您向服务器发送的每条消息,服务器都可以轻松发回确认消息。方法名称取决于您使用的服务器堆栈。大多数情况下,它类似于 client.sendMessage(yourMessage)
现在,让我们回答您在评论部分提出的问题。
How can I make the android app understand this msg is a confirmation one, not a normal one ?
无需传递原始文本,您可以在 JSON
例如,
您可以发送以下格式的正常回复
{
"type": "NORMAL",
"id": "someUniqueIdOfTheMessage",
"message": "This is some normal message"
}
为了确认,服务器可以发回这样的东西
{
"type": "CONFIRMATION",
"id": "someUniqueIdOfTheMessage"
}