Javascript 为什么node.js在本地主机上运行应用程序时需要升级?

Javascript 为什么node.js在本地主机上运行应用程序时需要升级?,javascript,node.js,websocket,real-time,Javascript,Node.js,Websocket,Real Time,当我尝试在本地主机服务器上运行node.js应用程序时,它不会运行,需要进行必要的升级。我已尝试运行代码,但出现以下错误: 服务器代码 var WebSocketServer = require('ws').Server, ws = new WebSocketServer({port: 80}), CLIENTS=[]; **new connection etablished** ws.on('connection', function(conn) {

当我尝试在本地主机服务器上运行node.js应用程序时,它不会运行,需要进行必要的升级。我已尝试运行代码,但出现以下错误:

服务器代码

 var WebSocketServer = require('ws').Server,
    ws = new WebSocketServer({port: 80}),
    CLIENTS=[];


**new connection etablished**
 ws.on('connection', function(conn) {
         CLIENTS.push(conn);
         conn.on('message', function(message) {
         console.log('received:  %s', message);
         sendAll(message);

    });


 console.log("new connection");
         conn.send("NOUVEAU CLIENT CONNECTE");

                **if you close connection**
         conn.on('close', function() {
           console.log("connection closed");
           CLIENTS.splice(CLIENTS.indexOf(conn), 1);
         });

    });
    **send messeages vers all clients**

function sendAll (message) {
    for (var i=0; i<CLIENTS.length; i++) {
      var j=i+1;
      CLIENTS[i].send("Message pour le client "+j+": "+message);
    }
}
      <p>
        Result :<output name="" type="text" id="result" value"readonly"></output>
      </p>
      <input type="text" onchange="ws.send(this.value);">
      </body>
      <script>
          var ws =new WebSocket('ws://localhost:80');
          ws.onmessage=function(event){
              document.getElementById("result").value=event.data;
          }
      </script>
var WebSocketServer=require('ws')。服务器,
ws=新的WebSocketServer({port:80}),
客户=[];
**新连接已启用**
ws.on('connection',函数(conn){
客户。推送(康涅狄格州);
连接on(信息),功能(信息){
console.log('接收到:%s',消息);
sendAll(消息);
});
控制台日志(“新连接”);
conn.send(“新客户连接”);
**如果你关闭连接**
连接on('关闭',函数(){
控制台日志(“连接关闭”);
客户。拼接(客户。索引of(conn),1);
});
});
**向所有客户端发送消息**
函数sendAll(消息){

for(var i=0;i
需要升级
是对在客户端(即浏览器)和服务器之间建立WebSocket连接时发送的标头的引用


正如@Prinzhorn在其评论中所述,您需要一个连接到WebSocket服务器的客户端应用程序,它可以是一个静态html页面。我建议您阅读以更好地了解WebSocket的工作原理。

您需要将基于WebSocket的服务器与静态html生成器Express相结合。 比如说

var express=require('express'))
var expressWs=require('express-ws')
var app=express()
expressWs(应用程序)
app.ws('/echo',(ws,req)=>{
ws.on('connection',函数(connection){
//...
})
ws.on('close',函数(){
//...
})
})
应用程序使用(express.static('public'))
应用程序侦听(3000,函数(){
log('端口3000上侦听的示例应用程序!')
})
在客户端代码中

var ws=newwebsocket('ws://localhost:3000/echo');
ws.onmessage=函数(事件){
document.getElementById(“结果”).value=event.data;
}

不要将客户端HTML文件作为本地主机URL打开,而是直接打开该文件

运行web套接字服务器后

localhost:[port]/client.html
->您将收到消息“需要升级”

文件:///[folder]/client.html
->您可以看到您的html文件

因为您没有任何带有web套接字的web服务器,或者您没有为web套接字配置web服务器。因此,您应该使用文件系统


最简单的方法是使用鼠标右键单击客户端文件,然后使用您喜爱的浏览器打开它。

问题是您的web套接字服务器正在端口80上运行,因此当您使用浏览器打开html模板时,实际上是在打开web套接字服务器。这是因为在浏览器中打开的网页默认使用端口80

要修复此问题,请将web套接字服务器的端口设置为3000之类的其他端口

ws=newwebsocketserver({port:3000})


然后,当您在浏览器中打开页面时,它将打开实际的html页面,而不是web套接字服务器。

您是否也有一个为您的html提供服务的http服务器?因为它看起来像是您试图使用浏览器导航到web套接字。不,我的应用程序中没有http服务器。您将如何显示html(客户端代码)您已经发布了吗?我会将http服务器添加到我的代码中如果您有任何解决方案,请告诉我们?我正在使用您的代码,我在控制台中收到
示例应用程序在端口3000上侦听!
消息,但仍然存在相同的问题