WebSockets,GlassFish,Grizzly – 无法连接

我正在尝试开始使用WebSockets,并尝试编写一个简单的应用程序来通过websoket来回发送消息。

但是,看起来我尝试创建的套接字永远不会连接。 为什么会这样?

下面是我的WebSockets类的代码。 调用.onConnect() ,它会记录:

我是sockets,我是连接的。 我联系了吗? – 假

更新:在JavaScript中,我创建了有问题的套接字, readyState1 ,这意味着“套接字打开,通信可能”。

 import abMisc; //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) +" << Bytes\n"); } @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代码仅在您安装在服务器上时才起作用(由于浏览器的安全性,因为它很“花哨”。)还有一步一步的基于浏览器的客户端教程正在我将发布的工作中尽快发布准备。 大多数代理服务器尚未升级为处理websockets,因此它们会搞砸连接请求,大多数人无法连接到websocket服务器。 Firefox 7(发行版)或Google Chrome 14或更高版本支持演示服务器运行的最新版本的websocket协议。

如果你想尝试让灰熊演示工作,你可能需要做一些调试,也许我会帮忙。 请注意,在文章下面的评论中,其他人说他们也无法使其工作,我没有找到任何后续行动。 在这一点上,它似乎并不比上面的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的war文件; 所以我猜它应该使用websockets。 熟悉jsp的人应该查看源代码。 我只能看到它正在使用http会话。 根本没有提到websocket。 这很像你好的样本。