簡體   English   中英

WebSockets,GlassFish,Grizzly —無法連接

[英]WebSockets, GlassFish, Grizzly — can't connect

我試圖開始使用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");
    }
}

如果您只是想在某個地方建立連接,則可能需要嘗試一下。 有一個現場演示程序 ,您可以下載javascript代碼並自己玩。 請注意,僅當您將javascript代碼安裝在服務器上時才起作用(由於瀏覽器的安全性,因為它是“花哨的”。)在我的作品中還有一個逐步的基於瀏覽器的客戶端教程,我將在發布后立即發布准備。 大多數代理服務器尚未升級為處理Websocket,因此它們會破壞連接請求,並且大多數人將無法從工作場所連接到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會話。 完全沒有提及網絡套接字。 這很像hello示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM