libGDX : 为 GWT 正确使用 websocket
libGDX : Correctly using websocket for GWT
这几天我一直在努力使用 websockets 进行基本的客户端/服务器通信
我的客户端是一个 java 客户端 libGDX 我的服务器是一个基本的 java 服务器
我的主要目标是将我的客户端编译成 HTML5 以使用 websockets 与我的服务器通信。
我在 google 上搜索时尝试了以下解决方案:
- 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 seemed an other good solution too, But it relies on http://code.google.com/p/gwt-ws/(这时候没明白这个意思)
3是我选择的,一个简单的WebSocketJavaAPI让我写客户端和服务器真的很轻松。
它在桌面和 android 上工作得很好,但是当我尝试 html:dist 时,gradle 给我关于 websocket 的错误,它不是继承等...
我的主 build.gradle 文件包含每个项目(核心、桌面、android、html)的这一行:编译 "org.java-websocket:Java-WebSocket:1.3.7"
所以继续我的主要问题:如何在 ligdx 中与使用 GWT 编译的客户端正确建立 websocket 连接,另外 TCP_NODELAY?
我的客户端很简单 class :
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);
}}
最后我找到了一种让它工作的方法,所以我post在这里给感兴趣的人一个答案。
我用了https://github.com/czyzby/gdx-lml/tree/master/websocket
特别是示例包,并严格遵循 build.gradle 和不同 xml 文件中需要添加的所有内容,所以现在它可以工作了!
所以总结:
- 服务器监听 websockets java-web-socket
- LIBGDX 客户端使用 gdx-websockets 连接到服务器(注意不同的构建 gradle 文件和 xml !!)
希望能帮到和我有同样问题的人!
根据 https://bugs.webkit.org/show_bug.cgi?id=102079 and https://groups.google.com/forum/#!topic/native-client-discuss/T8zdrMjiTAE, found via https://github.com/websockets/ws/issues/791 and https://github.com/varspool/Wrench/pull/104,大多数浏览器已经使用 TCP_NODELAY。至少从 websocket 标准来看,您无法在客户端影响这一点 - 在服务器上可能有更多选项。
如果客户端已经设置了TCP_NODELAY,您也可以在服务端设置,确保双方尽快发送小消息。
在 等问题中提出的另一个想法是立即响应发送的每条消息,以便网络堆栈尽快刷新所有剩余消息。
这几天我一直在努力使用 websockets 进行基本的客户端/服务器通信
我的客户端是一个 java 客户端 libGDX 我的服务器是一个基本的 java 服务器
我的主要目标是将我的客户端编译成 HTML5 以使用 websockets 与我的服务器通信。
我在 google 上搜索时尝试了以下解决方案:
- 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 seemed an other good solution too, But it relies on http://code.google.com/p/gwt-ws/(这时候没明白这个意思)
3是我选择的,一个简单的WebSocketJavaAPI让我写客户端和服务器真的很轻松。 它在桌面和 android 上工作得很好,但是当我尝试 html:dist 时,gradle 给我关于 websocket 的错误,它不是继承等...
我的主 build.gradle 文件包含每个项目(核心、桌面、android、html)的这一行:编译 "org.java-websocket:Java-WebSocket:1.3.7"
所以继续我的主要问题:如何在 ligdx 中与使用 GWT 编译的客户端正确建立 websocket 连接,另外 TCP_NODELAY?
我的客户端很简单 class :
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);
}}
最后我找到了一种让它工作的方法,所以我post在这里给感兴趣的人一个答案。
我用了https://github.com/czyzby/gdx-lml/tree/master/websocket
特别是示例包,并严格遵循 build.gradle 和不同 xml 文件中需要添加的所有内容,所以现在它可以工作了!
所以总结:
- 服务器监听 websockets java-web-socket
- LIBGDX 客户端使用 gdx-websockets 连接到服务器(注意不同的构建 gradle 文件和 xml !!)
希望能帮到和我有同样问题的人!
根据 https://bugs.webkit.org/show_bug.cgi?id=102079 and https://groups.google.com/forum/#!topic/native-client-discuss/T8zdrMjiTAE, found via https://github.com/websockets/ws/issues/791 and https://github.com/varspool/Wrench/pull/104,大多数浏览器已经使用 TCP_NODELAY。至少从 websocket 标准来看,您无法在客户端影响这一点 - 在服务器上可能有更多选项。
如果客户端已经设置了TCP_NODELAY,您也可以在服务端设置,确保双方尽快发送小消息。
在 等问题中提出的另一个想法是立即响应发送的每条消息,以便网络堆栈尽快刷新所有剩余消息。