WebSockets,GlassFish,Grizzly - 无法连接

时间:2011-09-30 06:53:01

标签: java websocket glassfish-3 grizzly

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

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

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

  

我是插座,我是连接的。我联系了吗? - 假

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

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) +" << 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");
    }
}

1 个答案:

答案 0 :(得分:0)

如果您只想尝试在某处建立连接,则可能需要尝试此操作。有一个live working demo,你可以下载javascript代码并自己玩。请注意,javascript代码仅在您安装在服务器上时才有效(由于浏览器的安全性,因为它很“花哨”。)还有一步一步的基于浏览器的客户端教程正在我将发布的工作中尽快发布准备。大多数代理服务器尚未升级到处理websockets,因此它们会搞砸连接请求,大多数人无法连接到websocket服务器。 Firefox 7(发布)或谷歌浏览器14或更高版本支持演示服务器运行的最新版本的websocket协议。

如果你想尝试让灰熊演示工作,你可能需要做一些调试,也许我会帮忙。请注意,在the article下面的评论中,其他人说他们无法使其工作,我也没有找到任何后续行动。在这一点上,它似乎并不比上面的echo应用程序更好,即使我们确实让它运行,如果你只是想开始,它可能过于复杂并且记录不足。但是如果你想尝试让它运行,你应该'git'最新版本的代码here,它至少是最近提交的并且可以修复。

然后确保应用程序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 server demo code已全部整理出来。

(另一个)更新:当我自己通过grizzly工作时,我发现在glassfish管理控制台的快速入门中,有一个很容易设置和运行的hello示例。你会在那里找到指示。示例目录还包含一个名为:websocket-mozilla的war文件;所以我猜它应该使用websockets。熟悉jsp的人应该查看源代码。我只能看到它正在使用http会话。根本没有提到websocket。这很像你好的样本。