1

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

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

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

我是socket,我是连接的。我连接了吗?- 错误的

更新:在 JavaScript 中,我在其中创建了有问题的套接字,readyStateis 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) +" << 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");
    }
}
4

1 回答 1

1

如果你只是想在某个地方建立连接,你可能想试试这个。有一个现场工作演示,您可以下载 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 服务器演示代码已经解决了这一切。

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

于 2011-10-04T20:17:27.817 回答