jQuery Web Socket没有连接而不是发送

时间:2014-06-30 06:16:37

标签: javascript jquery sockets websocket

我正在尝试将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代码网站下载了Github jQuery Websocket 0.0.4并按照示例进行了操作,但没有成功。

我只是尝试建立连接并以这种方式发送数据:

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

这给了我“undefined is not a function”错误。

然后我尝试以这种方式查看连接是否实际建立(不发送数据):

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

对我来说没有运气......控制台说没什么'...... 对此有何提示或帮助?任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:4)

也许您错过了jquery.websocket.js文件,但您可以使用javascript网络套接字:

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
}

答案 1 :(得分:1)

WebSockets不允许您以PHP fsockopen的方式连接到任意TCP服务器。服务器还必须支持WebSocket协议,特别是:

  
      
  1. 如果服务器选择接受传入连接,则必须   使用有效的HTTP响应回复,表明以下内容。

         
        
    1. 根据RFC 2616,具有101响应代码的状态行      [RFC2616]。这样的响应可能看起来像“HTTP / 1.1 101      切换协议“。

    2.   
    3. An | Upgrade |标题字段,其值为“websocket”,符合RFC      2616 [RFC2616]。

    4.   
    5. A |连接|标题字段,其值为“Upgrade”。

    6.   
    7. A | Sec-WebSocket-Accept |标题字段。这个的价值      header字段是通过连接/ key /来构造的      在4.2.2节的步骤4中,带有字符串“258EAFA5-      E914-47DA-95CA-C5AB0DC85B11“,取此的SHA-1哈希值      连接值以获得20字节的值和base64-      编码(参见[RFC4648]的第4节)这个20字节的散列。

           

      此标题字段的ABNF [RFC2616]定义为      如下:

           

      Sec-WebSocket-Accept = base64-value-non-empty      base64-value-non-empty =(1 * base64-data [base64-padding])|                               基于64位填充      base64-data = 4base64-character      base64-padding =(2base64-character“==”)|                         (3base64-character“=”)      base64-character = ALPHA | DIGIT | “+”| “/”

    8.   
  2.   

(来自WebSocket protocol specification

我怀疑您尝试连接的服务器不是特殊的WebSocket服务器,因此不会回复客户端握手的HTTP响应。

答案 2 :(得分:0)

您确定以正确的方式接受连接吗?

请查看How to call a WebSocket programmatically (using PHP)?,在交换数据之初会向客户发送一些内容,这可能是正确的方向。

如果您的服务器上的所有内容都正常,那么如果您将echo websocket服务器更改为您自己的,则此脚本应该可以正常工作http://jsbin.com/qibevu/1/edit

答案 3 :(得分:0)

就个人而言,我建议使用纯粹的javascript new WebSocket('ws://');,只要有一个后端套接字侦听同一地址和端口,它就会连接。