[英]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协议,尤其是:
如果服务器选择接受传入的连接,则它必须以有效的HTTP响应进行回复,指示以下内容。
符合RFC 2616 [RFC2616]的带有101个响应代码的状态行。 这样的响应可能看起来像“ HTTP / 1.1 101交换协议”。
|升级| 标头字段,其值为RFC 2616 [RFC2616]的值“ websocket”。
|连接| 标题字段,值为“ Upgrade”。
| 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.