¿Por qué el socket web se comporta de manera diferente en nodejs?

Tengo un código de Nodejs Server.js:

primer concepto:

var http = require('http'); var express = require('express'); var app = express(); var path = require('path'); var conn= http.createServer(app).listen(3000, function () { console.log("server Running at Port 3000"); }); var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({server: conn}); 

y tengo un código index.html con script java:

      

dentro de myscript.js tengo:

 var connection = new WebSocket('ws://localhost:3000'); 

Esto funciona bien cuando abro http://localhost:3000 en el navegador.

segundo concepto:

mi server.js :

 var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 3000}) ; wss.on('connection', function (connection) { }); wss.on('listening', function () { console.log("Server started..."); }); 

y HTML y la secuencia de comandos cliente java es similar a la anterior.

Esto no funciona cuando abro http://localhost:3000 en el navegador. por qué ? quiero aclarar mi duda ¿Por qué funciona el primer método y el segundo no funciona?

Para responder específicamente a su pregunta: ¿por qué el socket web se comporta de manera diferente en nodejs? la respuesta es: no debería. En la segunda versión de su código, no está sirviendo ningún archivo HTML o JS al cliente en el puerto 3000, por lo que el navegador no puede descargar ningún HTML.

Si desea que funcione como se espera, debe enviar algunos archivos HTML y JS al navegador que visita http: // localhost: 3000 / o de lo contrario no podrá conectarse.

Escribí un código de ejemplo, tanto del lado del servidor como del lado del cliente, sobre cómo usar WebSocket para hacer exactamente lo que estás tratando de hacer aquí. Está disponible en GitHub y originalmente lo escribí para esta respuesta: Diferencias entre socket.io y websockets .

Las partes relevantes del código fuente para su pregunta aquí son:

Servidor WebSocket

Ejemplo del servidor WebSocket usando Express.js:

 var path = require('path'); var app = require('express')(); var ws = require('express-ws')(app); app.get('/', (req, res) => { console.error('express connection'); res.sendFile(path.join(__dirname, 'ws.html')); }); app.ws('/', (s, req) => { console.error('websocket connection'); for (var t = 0; t < 3; t++) setTimeout(() => s.send('message from server', ()=>{}), 1000*t); }); app.listen(3001, () => console.error('listening on http://localhost:3001/')); console.error('websocket example'); 

Fuente: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js

Cliente WebSocket

Ejemplo de cliente de WebSocket usando JavaScript vanilla:

 var l = document.getElementById('l'); var log = function (m) { var i = document.createElement('li'); i.innerText = new Date().toISOString()+' '+m; l.appendChild(i); } log('opening websocket connection'); var s = new WebSocket('ws://'+window.location.host+'/'); s.addEventListener('error', function (m) { log("error"); }); s.addEventListener('open', function (m) { log("websocket connection open"); }); s.addEventListener('message', function (m) { log(m.data); }); 

Fuente: https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html

En lugar de depurar un código que no funciona, a veces es mejor comenzar desde algo que funcione y partir desde allí. Eche un vistazo a cómo funciona todo y siéntase libre de cambiarlo y utilizarlo en sus proyectos: se ha publicado bajo la licencia de MIT .