确认通过插座发送的数据已在服务器中收到



我在下面的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)

现在,让我们回答您在评论部分中提出的问题。

如何使Android应用了解此消息是一个确认 一个,不是正常的?

您可以在JSON

中进行通信,而不是传递原始文本

例如,

您可以以低于格式发送正常响应

{
  "type": "NORMAL",
  "id": "someUniqueIdOfTheMessage",
  "message": "This is some normal message"
}

和确认,服务器可以发送回类似的东西

{
  "type": "CONFIRMATION",
  "id": "someUniqueIdOfTheMessage"
}

最新更新