簡體   English   中英

jQuery Web套接字未連接且未發送

[英]jQuery Web Socket not connecting and not sending

我正在嘗試將PHP函數轉換為jQuery函數,以便可以直接從瀏覽器使用TCP / IP套接字本地連接。

我用這個:

$socket = @fsockopen('xxx.xxx.xxx.xxx', '8810', $err_no, $err_str);

if(!$socket){
    return 'Errore #'.$err_no.': '.$err_str;
}else{
    fwrite($socket, '["D";"C";"?ST";200]');
    $read = fread($socket, 2024);

     //other stuff...

    return $read;
    fclose($socket);

}

這很好。 然后,我從Google Code網站下載了Github jQuery Websocket 0.0.4 ,並按照示例進行操作,但未成功。

我只是嘗試以這種方式建立連接並發送數據:

ws = $.websocket("ws://95.110.224.199:8810/");
ws.send('string', '["D";"C";"?ST";200]');

這給我“未定義不是函數”錯誤。

然后,我嘗試查看連接是否實際上以這種方式建立(不發送數據):

var ws = $.websocket("ws://xxx.xxx.xxx.xxx:8810/", {
    open: function() {console.log('WS:connesso')},
    close: function() {console.log('WS:chiuso')},
});

對我來說沒有運氣...控制台上沒有提示...對此有任何提示或幫助嗎? 任何幫助表示贊賞。

也許您錯過了jquery.websocket.js文件,但可以使用javascript Web套接字:

ws = new WebSocket('ws://95.110.224.199:8810/'); 

或者,您可以放入0.0.0.0代替IP,因為某些服務器不允許直接IP訪問:

ws = new WebSocket('ws://0.0.0.0:8810/') 
ws.onopen = function(msg) {
    // Logic for opened connection
    console.log('Connection successfully opened');
};
ws.onmessage = function(msg) {
    // Handle received data
};

ws.onclose = function(msg) {
    // Logic for closed connection
    console.log('Connection was closed.');
}
ws.error =function(err){
    console.log(err); // Write errors to console
}

WebSockets不允許您使用PHP的fsockopen連接到任意TCP服務器。 服務器還必須支持WebSocket協議,尤其是:

  1. 如果服務器選擇接受傳入的連接,則它必須以有效的HTTP響應進行回復,指示以下內容。

    1. 符合RFC 2616 [RFC2616]的帶有101個響應代碼的狀態行。 這樣的響應可能看起來像“ HTTP / 1.1 101交換協議”。

    2. |升級| 標頭字段,其值為RFC 2616 [RFC2616]的值“ websocket”。

    3. |連接| 標題字段,值為“ Upgrade”。

    4. | Sec-WebSocket-Accept | 標頭字段。 該標頭字段的值是通過將/ key /(上面在第4.2.2節的第4步中定義)與字符串“ 258EAFA5- E914-47DA-95CA-C5AB0DC85B11”進行串聯而構成的,並采用了此串聯值的SHA-1哈希值以獲得20字節的值和base64編碼(請參閱[RFC4648]的第4節)此20字節的哈希。

      此標頭字段的ABNF [RFC2616]定義如下:

      Sec-WebSocket-Accept = base64值非空base64值非空=(1 * base64-data [base64-padding])| base64-padding base64-data = 4base64-字符base64-padding =(2base64-字符“ ==”)| (3base64-character“ =”)base64-character = ALPHA | 數碼| “ +” | “/”

(來自WebSocket協議規范

我懷疑您嘗試連接的服務器不是特殊的WebSocket服務器,因此不會通過HTTP響應來響應客戶端的握手。

您確定以正確的方式接受連接嗎?

請看看如何以編程方式(使用PHP)調用WebSocket? ,在交換數據開始時有一些東西發送給客戶端,也許這是正確的方向。

如果服務器一切正常,那么如果您將echo websocket服務器更改為自己的服務器,則此腳本應該可以正常運行http://jsbin.com/qibevu/1/edit

我個人建議使用純JavaScript new WebSocket('ws://'); 它很容易使用,只要后端套接字監聽相同的地址和端口,它就可以連接。

暫無
暫無

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

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