【问题标题】:Connect to Scala Websocket from Android Emulator with React native使用 React native 从 Android Emulator 连接到 Scala Websocket
【发布时间】:2021-01-28 08:46:15
【问题描述】:

我最近正在使用 React Native v40 和 Expo v40 开发一个聊天应用程序。一切正常,但我无法连接到我的 Scala(2.13.3) Websocket。 Socket 是用 Play (2.8) 构建的

为了更清楚:

客户端.ts

var wsUri = "ws://localhost:9000/ws";
let websocket: WebSocket

export function init() {
    testWebSocket();
}

function testWebSocket() {
    websocket = new WebSocket(wsUri);
    websocket.onopen = function (evt: Event) { onOpen(evt) };
    websocket.onclose = function (evt: Event) { onClose(evt) };
    websocket.onmessage = function (evt: MessageEvent<string>) { onMessage(evt) };
    websocket.onerror = function (evt: Event) { onError(evt) };
}

function onOpen(evt: Event) {
    doSend("Hello world");
}

function onClose(evt: Event) {
    console.log("closing connection")
}

function onMessage(evt: MessageEvent<string>) {
    console.log(evt.data)
}

function onError(evt: Event) {
    console.error(evt)
}

export function doSend(message: string) {
    websocket.send(message);
}

我的 Scala Websocket 如下所示:

Controller.scala:

def ws: WebSocket = WebSocket.accept[String, String] { request =>
        ActorFlow.actorRef { out =>
            ChatMessagingActor.props(out)
        }
    }

我的演员:

object ChatMessagingActor {
    def props(clientActorRef: ActorRef) = Props(new ChatMessagingActor(clientActorRef))
}

class ChatMessagingActor(clientActorRef: ActorRef) extends Actor {
    val logger: Logger = play.api.Logger(getClass)

    override def receive: Receive = {
        case msg: String =>
            println(msg)
            clientActorRef ! msg
        case None =>
            clientActorRef ! s"Closing the connection as requested"
            self ! PoisonPill
    }

    override def postStop(): Unit = println("Closing Messaging Socket")
}

那么现在的问题是什么?

当我启动模拟器(甚至是我的物理设备)时,我收到以下错误

Object { isTrusted: false, message: "Failed to connect to localhost/127.0.0.1:9000" }

连接立即关闭

当我尝试通过浏览器连接时,我没有收到任何错误。

到目前为止我尝试了什么?

  1. 我尝试连接到wss://echo.websocket.org,它有效 挺好的
  2. 我尝试使用基本的 html js 页面连接到 websocket,它 效果也不错
  3. 我将client.ts中的Socket地址改为ws://127.0.0.1:9000/ws

我认为这可能是一个安全问题,但我不太确定。我是否错过了 Scala 中的一些政策变化,或者这是 Android 的事情? 任何帮助将不胜感激。谢谢你的时间:)

【问题讨论】:

    标签: android scala react-native websocket playframework


    【解决方案1】:

    解决了问题:

    我将 Url (var wsUri) 从 localhost 更改为我的私有 IP 地址(我仍然不知道为什么会这样:D)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      相关资源
      最近更新 更多