我正在尝试开始使用WebSockets,并试图编写一个简单的应用程序,通过websocket来回发送消息。
然而,它看起来像我试图创建的套接字从未连接。为什么会这样呢?
下面是我的WebSockets类的代码。当.onConnect()
被调用时,它记录:
我是套接字,我已连接。我接通了吗?——假
更新:在JavaScript中,我创建了有问题的套接字,readyState
是1
,这意味着"套接字打开,通信是可能的"。
import a.b.Misc; //writes logs.
import com.sun.grizzly.websockets.BaseServerWebSocket;
import com.sun.grizzly.websockets.DataFrame;
import com.sun.grizzly.websockets.WebSocketListener;
public class ChatWebSocket_v2 extends BaseServerWebSocket {
private String user;
public ChatWebSocket_v2(WebSocketListener... listeners) {
super(listeners);
}
public String getUser() {
if (user == null) {
Misc.print("User is null in ChatWebSocket");
throw new NullPointerException("+=The user is null in chat web socket");
}
return user;
}
public void setUser(String user) {
Misc.print("Just set user: " + user);
this.user = user;
}
@Override
public void onMessage(String message) {
Misc.print(message +"n");
}
@Override
public void onMessage(byte[] message) {
Misc.print(new String(message) +" << Bytesn");
}
@Override
public void onConnect() {
Misc.print("I am socket, i was connected. Am i connected? - " + this.isConnected());
}
@Override
public void onClose(DataFrame df) {
Misc.print("I am socket, i was closed");
}
}
如果你只是想在某处建立连接,你可能想试试这个。有一个实时的工作演示,你可以下载javascript代码和自己玩它。请注意,javascript代码只工作,如果你有它安装在服务器上(由于浏览器安全,因为它是"花哨")。还有一个一步一步的基于浏览器的客户端教程,我将在它准备好后尽快发布。大多数代理服务器还没有升级到处理websocket,所以他们会搞砸连接请求,大多数人将无法从工作中连接到websocket服务器。Firefox 7(发行版)、Google Chrome 14及以上版本支持最新版本的websocket协议。
如果你想试着让grizzly演示工作,你可能需要做一些调试,也许我可以帮你。请注意,在文章下面的评论中,其他人说他们也无法使用它,我还没有发现任何后续行动。在这一点上,它似乎并不比上面的echo应用程序好,即使我们让它运行起来,如果你只是想开始,它可能过于复杂和缺乏文档。但是如果你想让它运行,你应该在这里"git"最新版本的代码,至少是最近提交的,可能会被修复。
然后确保应用程序javascript文件中的app.url设置为您的安装目录。它被硬编码为:
url: 'ws://localhost:8080/grizzly-websockets-chat/chat',
如果你使用的是Firefox 7,需要修改javascript以使用Moz前缀,例如:
if (typeof MozWebSocket != "undefined") { // window.MozWebSocket or "MozWebSocket" in window
ok
} else if (window.WebSocket) { // he uses if ("WebSocket" in window)
ok
} else {
do your print "browser doesn't support websockets"
}
.... then if the browser supports websockets
websocket = new WebSocket(app.url); or
websocket = new MozWebSocket(app.url);
// depending on which it is.
HLL websocket服务器演示代码已经把这些都整理好了。
(另一个)更新:当我自己通过灰灰工作时,我发现在glassfish管理控制台的快速开始中,有一个很容易设置和运行的hello示例。你会在那里找到说明。示例目录还包含一个名为:websocket-mozilla;所以我猜它应该使用websockets。熟悉jsp的人应该检查源代码。我所能看到的是它正在使用http会话。根本没有提到websocket。