Java libGDX:正确使用用于GWT的websocket

Java libGDX:正确使用用于GWT的websocket,java,html,gwt,websocket,libgdx,Java,Html,Gwt,Websocket,Libgdx,我一直在努力使用WebSocket进行基本的客户机/服务器通信 我的客户机是一个带有libGDX的java客户机,我的服务器是一个基本的java服务器 我的主要目标是将我的客户端编译成HTML5,以便使用WebSocket与服务器通信 在谷歌上搜索时,我尝试了以下解决方案: 似乎是最好的解决方案,但它似乎没有TCP_NODELAY套接字设置(这在我的情况下是必不可少的) 这似乎也是一个很好的解决方案,但它依赖于(目前还不理解这一点) 这就是我选择的,一个简单的WebSocket Jav

我一直在努力使用WebSocket进行基本的客户机/服务器通信

我的客户机是一个带有libGDX的java客户机,我的服务器是一个基本的java服务器

我的主要目标是将我的客户端编译成HTML5,以便使用WebSocket与服务器通信

在谷歌上搜索时,我尝试了以下解决方案:

似乎是最好的解决方案,但它似乎没有TCP_NODELAY套接字设置(这在我的情况下是必不可少的)

这似乎也是一个很好的解决方案,但它依赖于(目前还不理解这一点)

这就是我选择的,一个简单的WebSocket Java API,让我可以非常轻松地编写客户机和服务器。 它在桌面和android上运行得非常好,但当我尝试使用html:dist时,gradle给了我一个关于websocket的错误,它不是inherit等

我的主build.gradle文件包含每个项目(核心、桌面、android、html)的这一行:编译“org.javawebsocket:javawebsocket:1.3.7”

现在继续我的主要问题:如何正确地建立websocket与在ligdx中使用GWT编译的客户端的连接,以及TCP\u节点延迟?

我的客户是一个非常简单的类:

package com.mygdx.game;
import java.net.URI;
import java.nio.ByteBuffer;

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.handshake.ServerHandshake;

public class WebSocketsNet extends WebSocketClient {

    public WebSocketsNet(URI serverUri, Draft draft) {
        super(serverUri, draft);
    }

    public WebSocketsNet(URI serverURI) {
        super(serverURI);
    }

    @Override
    public void onOpen(ServerHandshake handshakedata) {
        send("Hello, it is me. Mario :)");
        System.out.println("new connection opened");
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        System.out.println("closed with exit code " + code + " additional info: " + reason);
    }

    @Override
    public void onMessage(String message) {
        System.out.println("received message: " + message);
    }

    @Override
    public void onMessage(ByteBuffer message) {
        System.out.println("received ByteBuffer");
    }

    @Override
    public void onError(Exception ex) {
        System.err.println("an error occurred:" + ex);
    }}

最后,我找到了一种方法使它发挥作用,所以我在这里为那些感兴趣的人发布了一个答案

我曾经

特别是示例包,严格遵循build.gradle和不同xml文件上需要添加的所有内容,因此现在它可以工作了

因此,总结如下:

  • 使用
  • LIBGDX客户端用于连接到服务器(注意不同的构建梯度文件和xml!!)
希望能帮助像我一样有同样问题的人

根据和,通过和发现,大多数浏览器已经使用TCP_节点延迟。至少从websocket标准来看,您无法对客户端产生任何影响—在服务器上可能有更多选项

如果客户机上已经设置了TCP_节点延迟,那么您也可以在服务器上设置它,以确保双方尽快发送小消息


类似问题中建议的另一个想法是立即响应发送的每条消息,以便网络堆栈尽快刷新所有剩余消息。

不幸的是,WebSocket非常有限,您对它们的控制与对原始套接字的控制不同-浏览器控制大部分套接字设置,以防止发生各种攻击。这可能是其中之一——看看websocket规范和其他描述它的文档,看看在websocket设置中有多少选项可用。另一方面,在您有更多控制权的服务器端更改此设置或其他设置是否足够?您好,谢谢您的回答!我几天前刚看到mozilla的网站。显然,是的,我可以很容易地在服务器端禁用nagle的算法(比如:WebSocketServer服务器=新服务器(新的InetSocketAddress(主机,端口));server.setTcpNoDelay(true);),但是在客户端它需要相同吗?还是只关心服务器端的tcp无延迟?