【问题标题】:How To Achieve Network Communication In HTML5 LibGDX/GWT如何在 HTML5 LibGDX/GWT 中实现网络通信
【发布时间】:2015-08-28 06:54:17
【问题描述】:

目标:实现一个基本客户端,可以从 LibGDX/GWT HTML5/JavaScript 部署与服务器通信。这是一款基于浏览器的辅助项目多人在线游戏。

我知道和做过的事情:我所有的网络经验都来自 KryoNet(创建一个服务器对象,启动服务器,监听请求,你已经完成了) - 这可以(或类似的)架构可以在 LibGDX/GWT HTML5 部署中实现吗?

经过数小时的研究,我还没有对每个人都说要使用的被称为“WebSockets”的神奇东西感到幸运。我发现的唯一“WebSockets”在 Gdx.net 中,它们“未实现”。

以下代码(在 Libgdxclient-core 中执行并从 Libgdxclient-html 编译)

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Net.Protocol;
import com.badlogic.gdx.net.Socket;


import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Net.Protocol;
import com.badlogic.gdx.net.Socket;


public class Client {
    private Socket socket;

    public Client() {
        Gdx.app.log("create()", "connecting.....");
        this.socket = Gdx.net.newClientSocket(Protocol.TCP, "127.168.1.1", 54555, null);
    }
}

产生这个输出:

我遇到了几个关于 WebSocket 实现的 GitHub 存储库,但是我很难理解它们中的哪些(如果有的话)实际上是 LibGDX/GWT 兼容的,并且可以真正使用我需要阅读的内容继续完成我的目标(我正在寻找一个纯 Java 解决方案)。

【问题讨论】:

  • 你找到答案了吗?我想在 Libgdx 中为所有平台做套接字
  • 您应该能够使用 JSNI 创建实现。这将需要一些经典的软件工程,但对您来说将是一个很好的练习。

标签: java html gwt websocket libgdx


【解决方案1】:

您可能已经解决了您的问题(或选择了其他解决方案),但它仍然可能对某人有用。

首先:Net 实现中的套接字是 TCP 套接字,浏览器不支持 - 因此是空实现。即使您使用第三方 GWT Web 套接字实现,它仍然与 LibGDX TCP 服务器套接字不兼容。

但是,您可以选择众多 Web 套接字服务器实现之一以及用于“标准”LibGDX 平台的基于 Java 的 Web 套接字客户端解决方案和用于 Web 的 GWT Web 套接字。 LibGDX 应用程序的常见选择似乎是:

  • Java WebSockets - 服务器和客户端实现。客户端可以针对大多数常规 LibGDX 平台。
  • gwt-websockets - 一个非常简单的“本机”浏览器 Web 套接字的 GWT 包装器。

这些是我建议研究的一些其他库:

  • nv-websocket-client - Android 兼容的网络套接字客户端。
  • gwt-websockets 来自 realityforge - 更复杂的 GWT Web 套接字包装器,包含更多功能。
  • Vert.x - 一个出色的服务器框架,具有 Web 套接字支持。
  • gdx-websocket - 用于 LibGDX 应用程序的通用 Web 套接字 API。在内部使用 nv-websocket-client 和自定义 GWT 包装器以针对大多数 LibGDX 平台。免责声明:我是作者。

【讨论】:

  • 您认为这些 websocket 实现有多强大? .. 足够一致,可以在需要持续通信的商业应用中使用?
  • 老实说,我仅将 LibGDX 与 Web 套接字一起用于小型个人项目,并且没有进行任何相当大的基准测试。 Web 套接字基本上使用 TCP,因此它们受到相同的限制:除非您正在制作回合制游戏,UDP communication would most likely do better。如果您使用每个 Web 套接字库/框架创建一些简单的应用程序并比较它们的性能,那将是最好的。您也可以加入 KryoNet,以便将它们与 UDP 实现进行比较。
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
相关资源
最近更新 更多