我已经努力了几天,试图使用Websockets进行基本的客户端/服务器通信。
我的客户端是一个带有libGDX的Java客户端,我的服务器是一个基本的Java服务器。
我的主要目标是将我的客户端编译成HTML5,以便使用Websockets与我的服务器通信。
当我在谷歌上搜索时,尝试了以下解决方案:
- https://github.com/czyzby/gdx-lml/tree/master/websocket
- https://github.com/pepedeab/libGDX-Net
- https://github.com/TooTallNate/Java-WebSocket
1似乎是最好的解决方案,但它没有TCP_NODELAY套接字设置(这在我的情况下非常重要)。
2也是另一个不错的解决方案,但它依赖于http://code.google.com/p/gwt-ws/(目前我不明白这一点)。
3是我选择的,一个简单的WebSocket Java API,让我非常容易地编写客户端和服务器。它在桌面和Android上运行得非常好,但当我尝试html:dist时,gradle会报websocket的错误,因为它没有继承等......
我的主build.gradle文件对每个项目(核心,桌面,Android,HTML)都包含此行:compile "org.java-websocket:Java-WebSocket:1.3.7"
因此,总结我的主要问题:如何在使用GWT编译的Ligdx客户端中正确建立带有TCP_NODELAY的WebSocket连接?
我的客户端只是一个非常简单的类:
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);
}}