我想用nodejs创建类似聊天的东西。 我是nodejs的新手,想在不使用socket.io的情况下创建它(我想学习它的工作原理)。 这是我正在使用的代码。
var http = require('http');
var net = require('net');
var server = http.createServer(function(req,res){
res.writeHead(200,{'content-type' : 'text/html'});
res.write('<a href="./lol/">lol</a><br>');
res.end('hello world: '+req.url);
var client = new net.Socket();
client.connect('7001', '127.0.0.1', function() {
console.log('CONNECTED TO: ');
// Write a message to the socket as soon as the client is connected, the server will receive it as message from the client
client.write('I am Chuck Norris!');
});
// Add a 'data' event handler for the client socket
// data is what the server sent to this socket
client.on('data', function(data) {
console.log('DATA: ' + data);
// Close the client socket completely
client.destroy();
});
// Add a 'close' event handler for the client socket
client.on('close', function() {
console.log('Connection closed');
});
//req.
});
server.listen(7000);
require('net').createServer(function (socket) {
console.log("connected");
socket.on('data', function (data) {
console.log(data.toString());
});
}).listen(7001);
一切都很好(我想)。 当我打开localhost:7000时,我在节点CMD消息中看到了关于“CONNECTED TO:”、“connected”和“I am Chack Norris”的内容。 之后,我尝试在浏览器控制台中输入:
var conn = new WebSocket('ws://localhost:7001/');
同样没有错误,但当我尝试这行代码时:
conn.send('lol');
我遇到了一个错误:"Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.(…)"
一段时间后,我又遇到了另一个错误:"WebSocket connection to 'ws://localhost:7001/' failed: WebSocket opening handshake timed out"
也许我的代码有问题,但我已经尝试了在谷歌上找到的一切方法。有人能帮我解决这个问题吗?
GET
请求。我所做的就是用new WebSocket('wss://echo.websocket.org')
打开一个WebSocket。我的问题是:只有服务器需要实现上面的升级吗?是否设置了GET /chat
的HTTP路由? 另外,您能详细说明一下Sec-WebSocket-Accept
头部值吗?对我来说,它看起来不像是静态的Base-64字符串。 - Codynew WebSocket('wss://echo.websocket.org')
会帮你完成 HTTP 请求。它会为你执行整个 WebSocket 协议,包括初始的 HTTP 请求。通常情况下,你不会自己实现 WebSocket 服务器,而是使用一个库来挂钩到现有的 HTTP 服务器上,监听传入的请求并设置upgrade: websocket
的头部,然后从那里接管该请求。 - jfriend00GET /chat
的路由/控制器响应这些头部信息,但之后除了心跳/保持活动的实现外没有太多要处理的。我不需要担心在那之后解析数据包,对吗?虽然好奇驱使我问一下,但我应该如何预期接收和处理消息呢?您能提供任何相关信息吗?(顺便说一句,非常感谢您在这方面的所有知识;超级有帮助!) - Cody