我对后端开发相当新,从前端开始我选择节点作为后端。我根据图书阅读创建了非常简单的聊天。代码很简单。
var net=require("net");
var sockets=[];
var server=net.createServer();
server.on("connection",function(socket){
console.log("new connection");
socket.write("hi");
sockets.push(socket);
socket.on("data",function(data){
console.log("got: "+data);
sockets.forEach(function(otherSocket){
if(otherSocket!==socket){
otherSocket.write(data)
}
});
});
socket.on("close",function(){
console.log("socket closed");
var index=sockets.indexOf(socket);
sockets.splice(index,1)
})
});
server.on("error",function(error){
console.log("error :");
})
server.on("close",function(){
console.log("server has closed");
})
server.listen(8888); //server.listen(4001)
我在节点例如节点example.js中运行此代码, 基本上它返回
new connection
new connection
got: GET / HTTP/1.1
Host: localhost:8888
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0
.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/44.0.2403.130 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: sk-SK,sk;q=0.8,cs;q=0.6,en-US;q=0.4,en;q=0.2
socket closed
正如你所看到的那样,袜子已关闭,但为什么套接字会在这里自动关闭?发送完所有数据后会自动关闭吗?我的localhost也不会在这里加载,而它会加载http.createServer。 最后,至于这是原始聊天,如果它运作良好,我将如何测试它。我尝试打开cmd并多次运行但它总是抛出错误(第一次除外)
答案 0 :(得分:0)
我猜客户端已关闭套接字,因为您没有发送有效的HTTP响应。我假设你想使用浏览器进行聊天前端;但是您的示例使用原始TCP套接字,这意味着您必须使用类似telnet的东西。你应该看一下在浏览器中工作的WebSockets(如果你真的想为浏览器客户端构建一个聊天应用程序)。