Java libGDX:正确使用用于GWT的websocket
我一直在努力使用WebSocket进行基本的客户机/服务器通信 我的客户机是一个带有libGDX的java客户机,我的服务器是一个基本的java服务器 我的主要目标是将我的客户端编译成HTML5,以便使用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
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!!)
类似问题中建议的另一个想法是立即响应发送的每条消息,以便网络堆栈尽快刷新所有剩余消息。不幸的是,WebSocket非常有限,您对它们的控制与对原始套接字的控制不同-浏览器控制大部分套接字设置,以防止发生各种攻击。这可能是其中之一——看看websocket规范和其他描述它的文档,看看在websocket设置中有多少选项可用。另一方面,在您有更多控制权的服务器端更改此设置或其他设置是否足够?您好,谢谢您的回答!我几天前刚看到mozilla的网站。显然,是的,我可以很容易地在服务器端禁用nagle的算法(比如:WebSocketServer服务器=新服务器(新的InetSocketAddress(主机,端口));server.setTcpNoDelay(true);),但是在客户端它需要相同吗?还是只关心服务器端的tcp无延迟?