净插座关闭

时间:2015-08-06 18:22:54

标签: node.js

我对后端开发相当新,从前端开始我选择节点作为后端。我根据图书阅读创建了非常简单的聊天。代码很简单。

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并多次运行但它总是抛出错误(第一次除外)

1 个答案:

答案 0 :(得分:0)

我猜客户端已关闭套接字,因为您没有发送有效的HTTP响应。我假设你想使用浏览器进行聊天前端;但是您的示例使用原始TCP套接字,这意味着您必须使用类似telnet的东西。你应该看一下在浏览器中工作的WebSockets(如果你真的想为浏览器客户端构建一个聊天应用程序)。