如何确保套接字协议后面的任何无效或不需要的请求都被拒绝,我的套接字也没有关闭。
考虑一个简单的例子:
var net = require('net');
net.createServer(function(socket) {
socket.on('data', function(data) {
var parsedData = JSON.parse(data.toString());
});
}).listen(5555);
server.listen(1337, '127.0.0.1');

尝试从浏览器访问该端口,再次查看终端。它产生以下错误:
undefined:1
GET / HTTP/1.1
^
SyntaxError: Unexpected token G
at Object.parse (native)
at Socket.<anonymous> (/home/agauniyal/projects/watch/watch.js:115:35)
at Socket.emit (events.js:107:17)
at readableAddChunk (_stream_readable.js:163:16)
at Socket.Readable.push (_stream_readable.js:126:10)
at TCP.onread (net.js:529:20)
现在我完全同意访问该端口是我的错误,但是关闭不同格式的套接字而不是拒绝该请求并不是理想的方法。如果有人试图访问该端口的网络服务器,后来才意识到在8080没有任何内容,该怎么办呢。
那么我应该如何确保套接字没有关闭,而是拒绝该请求?
编辑:这可能发生,因为我正在从套接字和 http标头收到的数据上调用JSON.Parse(data.toString())
方法不是被该方法解析。
答案 0 :(得分:0)
整个问题上升是因为我得到套接字响应,将其转换为字符串然后将其解析为JSON。现在在我的情况下,我要么保证传入的数据是有效的JSON字符串,要么发现浏览器正在向该套接字发送请求。
对于实时快速修复,我从输入数据中提取第一个单词并检查它是否为&#39; GET&#39; (浏览器发送的),如果它的计算结果为true,那么就像我之前一样,什么都不做。捕获JSON.parse错误也是更好的解决方案。