Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 铬合金16腹板套筒hybi-17_Html_Node.js_Websocket - Fatal编程技术网

Html 铬合金16腹板套筒hybi-17

Html 铬合金16腹板套筒hybi-17,html,node.js,websocket,Html,Node.js,Websocket,我正在尝试让套接字与使用最新协议的Chrome 16一起工作: 服务器正在使用node.js,代码如下: var http = require('http'), net = require('net'), crypto = require('crypto'); var server = http.createServer(function (req, res) { console.log(req); }); server.on('connection', function (str

我正在尝试让套接字与使用最新协议的Chrome 16一起工作:

服务器正在使用node.js,代码如下:

var http = require('http'), net = require('net'), crypto = require('crypto');

var server = http.createServer(function (req, res) {
    console.log(req);
});

server.on('connection', function (stream) {
    stream.setEncoding('utf8');
    stream.setTimeout(0);
    stream.setNoDelay(true);
    stream.on('data', function (data) {
        console.log(data);
        console.log("****Incoming****\r\n" + data);     
        var securyPattern = /Sec-WebSocket-Key: (.*)/g;
        var key = securyPattern.exec(data);
        var magic = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
        var sha1 = crypto.createHash('sha1');
        sha1.update(key[1] + magic);
        var accept = sha1.digest('base64');
        var response = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + accept;

        stream.write(response);
        console.log("****Outgoing****\r\n" + response);
    });
});

server.listen(1337, 'xxxxxxx.no-ip.info');
no-ip.info是我的ip地址,我正在为我的Web服务器使用该地址,该地址工作正常

头部内的脚本标记内的浏览器(客户端)代码:

window.onload = function () {
    var myWebSocket = new WebSocket("ws://xxxxxxx.no-ip.info:1337/"); 

    myWebSocket.onopen = function(evt) {
        alert("open");
        console.log("WebSockets connection opened");
        myWebSocket.send("a test message");
    };

    myWebSocket.onmessage = function(evt) {
        console.log("Got WebSockets message: " + e.data);
    };

    myWebSocket.onclose = function(evt) {
        console.log("WebSockets connection closed");
    };
};

onopen函数从未被触发,我在stackoverflow上发现了大部分代码,但进行了更改,使其能够使用最新的协议,有人知道代码有什么问题吗?(当我连接时,它会在CMD中打印发送给它的数据,但在Chrome控制台中,它只会显示closed connection(从不打开)。

我不知道node.js,因此它可能会为您执行此操作,但


您的响应不应该以\r\n\r\n结尾吗?至少看起来您的accept标头缺少一个\r\n…。

我怀疑您的响应缺少一个Web套接字协议标头。如果客户端发送一个协议列表(1个或多个),则服务器必须选择一个并在响应中返回它


此外,您的响应应以“\r\n\r\n”结尾.

你试过看吗?节点模块和前端都有

如果你为myWebSocket定义一个函数,你会得到什么?一个错误?它也没有被触发:/Hi。这是问题所在,它现在连接起来了。我试过了\r\n,但显然还不够。多谢了,看起来很有趣,但我找不到任何d下载链接,我现在正在使用windows,如何安装?你能使用NPM节点包管理器吗?-AFAICT,windows上的节点仍在整理中。