【发布时间】: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" }
连接立即关闭
当我尝试通过浏览器连接时,我没有收到任何错误。
到目前为止我尝试了什么?
- 我尝试连接到
wss://echo.websocket.org,它有效 挺好的 - 我尝试使用基本的 html js 页面连接到 websocket,它 效果也不错
- 我将client.ts中的Socket地址改为ws://127.0.0.1:9000/ws
我认为这可能是一个安全问题,但我不太确定。我是否错过了 Scala 中的一些政策变化,或者这是 Android 的事情? 任何帮助将不胜感激。谢谢你的时间:)
【问题讨论】:
标签: android scala react-native websocket playframework