Node.js 在向套接字服务器发送消息后保留TCP套接字客户端

Node.js 在向套接字服务器发送消息后保留TCP套接字客户端,node.js,sockets,tcp,Node.js,Sockets,Tcp,我正在使用浏览器中的库和WebSocket实现一个套接字节点服务器。我正在成功使用telnet主机端口,但浏览器工作不正常。浏览器成功连接到套接字服务器并发送消息。我的服务器实现了一个data事件,并立即触发close和end事件关闭,结束事件在断开连接时执行删除客户端(关闭浏览器,连接松动…) 我不希望浏览器发送消息,然后断开连接。 有人知道问题出在哪里吗 套接字服务器 var express = require('express'); var app = express(); var pat

我正在使用浏览器中的库和WebSocket实现一个套接字节点服务器。我正在成功使用telnet
主机
端口
,但浏览器工作不正常。浏览器成功连接到套接字服务器并发送消息。我的服务器实现了一个
data
事件,并立即触发
close
end
事件<代码>关闭,
结束
事件在断开连接时执行删除客户端(关闭浏览器,连接松动…)

我不希望浏览器发送消息,然后断开连接。 有人知道问题出在哪里吗

套接字服务器

var express = require('express');
var app = express();
var path = require('path');
var cors = require('cors');
var config = require(path.join(__dirname, '/config.json'));
var net = require('net');
app.use(cors());

var serverSocket = net.createServer(function(socket) {
    socket.write('Connected socket server\r\n');
});

serverSocket.listen(3332, () => {
    console.log('opened socket on', serverSocket.address());
});

var client = [];
serverSocket.on('connection', (conn) => {
    console.log('client ', client.length, ' connected');

    conn.id = Math.floor(Math.random() * 1000);
    while (client.indexOf(conn) !== -1) {
        // socket id exits
        conn.id = Math.floor(Math.random() * 1000);
        console.log('repeat');
    }
    client.push(conn);
    console.log('client id ', conn.id);
    conn.on('data', function(data) {
        console.log(data.toString('utf8'));
    });

    conn.on('end', function() {
        // client.splice(client.indexOf(conn), 1);
        // console.log(conn.id + ' disconnected');
        // console.log('clientArr ' + client);
    });

    conn.on('error', (err) => {
        console.log("Caught flash policy server socket error: ");
        console.log(err.stack);
    });

    conn.on('close', (e) => {
        client.splice(client.indexOf(conn), 1);
        console.log(conn.id + ' disconnected');
        console.log('clientArr ' + client);
    });

});

app.listen(config.port);
console.log('Server start on port: ' + config.port);
<!DOCTYPE html>
<html>
<head>test</head>
<body>
<div class="">
    <button>button</button>
</div>
<script type="text/javascript">
$(document).ready(function() {
    // Create WebSocket connection.
    const socket = new WebSocket('ws://192.168.0.111:3332');

    // Connection opened
    socket.addEventListener('open', function(event) {
        socket.send('Hello Server!');
    });
});
</script>
</body>
</html>
客户端(浏览器)


服务器无法从客户端记录
Hello Server
,而不是头文件。服务器也会立即丢失客户端的发送消息。。请帮忙

WebSocket连接通过众所周知的协议工作,如中所述。您的服务器没有实现此协议,它只是一个常规TCP服务器

当浏览器与您的服务器建立WebSocket连接,而您的服务器未根据协议响应时,浏览器将关闭连接(可能会在控制台中记录协议错误消息)


要实现WebSocket服务器,请查看该包。

我想创建一个套接字tcp常规(无特殊请求)。我以前使用socket io,但socket io只在socket io和socket io客户端之间通信。如何在浏览器中创建套接字tcp规则。@Ntlzz93这是不可能的。
Server start on port: 6010
opened socket on { address: '::', family: 'IPv6', port: 3332 }
connecting mongoose
client  0  connected
client id  685
GET / HTTP/1.1
Host: 192.168.0.111:3332
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost:8643
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: vi,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,pt;q=0.2
Sec-WebSocket-Key: lNMRkgoSb8xOH5iuE/f4UA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits


685 disconnected
clientArr