繁体   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