Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在HTML5 LibGDX/GWT中实现网络通信_Java_Html_Gwt_Websocket_Libgdx - Fatal编程技术网

Java 如何在HTML5 LibGDX/GWT中实现网络通信

Java 如何在HTML5 LibGDX/GWT中实现网络通信,java,html,gwt,websocket,libgdx,Java,Html,Gwt,Websocket,Libgdx,目标:实现一个基本客户端,可以从LibGDX/GWT HTML5/JavaScript部署与服务器通信。这是一款基于浏览器的多人在线游戏 我所知道和做过的事情:我所有的网络经验都来自KryoNet(创建一个服务器对象,启动服务器,监听请求,完成任务)——这种(或类似的)架构可以在LibGDX/GWT HTML5部署中实现吗 在做了几个小时的研究之后,我还没有发现这些人人都说要使用的叫做“WebSockets”的神奇东西。我发现的唯一“WebSocket”是在Gdx.net中,它们“没有实现”

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

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

在做了几个小时的研究之后,我还没有发现这些人人都说要使用的叫做“WebSockets”的神奇东西。我发现的唯一“WebSocket”是在Gdx.net中,它们“没有实现”

以下代码(在Libgdxclient核心中执行,并从Libgdxclient html编译)

生成此输出:


在WebSocket实现方面,我遇到了几个GitHub存储库,但是我很困惑其中哪一个(如果有的话)是与LibGDX/GWT兼容的,并且我真的可以帮助我了解我需要阅读什么来实现我的目标(我正在寻找一个纯Java解决方案)。

您可能已经解决了您的问题(或者选择了另一种解决方案),但它仍然可能对某些人有用

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

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

  • -服务器和客户端实现。客户端可以针对大多数常规LibGDX平台
  • -一个非常简单的“本机”浏览器web套接字GWT包装器
以下是我建议查看的一些附加库:

  • -Android兼容的web套接字客户端
  • 来自
    realityforge
    ——更复杂的GWT web套接字包装,包含更多功能
  • -卓越的服务器框架,支持web套接字
  • -用于LibGDX应用程序的通用web Socket API。在内部使用nv websocket客户端和自定义GWT包装器来针对大多数LibGDX平台。免责声明:我是作者

你找到答案了吗?我想在Libgdx中为所有平台创建套接字。你应该能够使用JSNI创建一个实现。这需要一些经典的软件工程,但对你来说是一个很好的练习。你认为这些websocket实现有多健壮?。一致性足以在商业应用程序中使用不需要经常交流?老实说,我只在小型个人项目中使用带有web套接字的LibGDX,并且没有做过任何相当大的基准测试。web套接字基本上使用TCP,因此它们受到相同的限制:除非您正在制作基于回合的游戏。最好使用每个web套接字创建一些简单的应用程序ocket库/框架,并比较它们的性能。您也可以加入KryoNet,这样您就可以将它们与UDP实现进行比较。
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);
    }
}