簡體   English   中英

無法創建簡單的websocket-NodeJS

[英]unable to create simple websocket - NodeJS

我正在嘗試遵循本教程: https ://www.simonewebdesign.it/101-web-socket-protocol-handshake/,用於開發簡單的websocket協議。

我正在訪問localhost:1337/index.html但得到:

找不到此本地主機頁面

找不到網址的網頁: http:// localhost:1337 / index.html在 Google上搜索localhost 1337索引HTTP錯誤404

如果我訪問此網址: file:///C:/Users/.../websocket-demo/index.html

我至少看到了呈現的index.html頁面。 但是在控制台中,我收到此錯誤:

WebSocket與“ ws:// localhost:1337 /”的連接失敗:連接建立錯誤:net :: ERR_CONNECTION_REFUSED

我不確定是怎么了?

我有3個文件: index.htmlserver.jsclient.js

server.js

#!/usr/bin/env node
var WebSocketServer = require('websocket').server;
var http = require('http');

var server = http.createServer(function(request, response) {
  console.log('Received request from ' + request.url);
  response.writeHead(404);
  response.end();
});

server.listen(1337, function() {
    console.log('Server is listening on port 1337.');
});

wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false // because security matters
});

function isAllowedOrigin(origin) {
  console.log('Connection requested from origin ' + origin);

  valid_origins = [
    'http://localhost:8080',
    '127.0.0.1',
    'null'
  ];

  if (valid_origins.indexOf(origin) != -1) {
    console.log('Connection accepted from origin ' + origin);
    return true;
  }

  console.log('Origin ' + origin + ' is not allowed.')
  return false;
}

wsServer.on('connection', function(webSocketConnection) {
  console.log('Connection started.');
});

wsServer.on('request', function(request) {

  var connection = isAllowedOrigin(request.origin) ?
    request.accept('echo-protocol', request.origin)
    : request.reject();

  connection.on('message', function(message) {

    var response = '';
    console.log('Received Message: ' + message.utf8Data);

    if (message.type === 'utf8') {

      switch (message.utf8Data) {
        case 'hi':
          response = 'Hey there';
          break;
        case 'hello':
          response = 'Heya!';
          break;
        case 'xyzzy':
          response = 'Nothing happens.';
          break;
        case 'desu':
          response = 'Keep typing, man. Keep typing.';
          break;
        default:
          response = "Hello. Uh... what am I supposed to do with '" +
          message.utf8Data + "'?";
      }
      connection.sendUTF(response);
    }
  });
  connection.on('close', function(reasonCode, description) {
      console.log(connection.remoteAddress + ' has been disconnected.');
  });
});

client.js

(function () {

  var ws = new WebSocket('ws://localhost:1337', 'echo-protocol');

  ws.onopen = function (event) {
    console.log('Connection opened.');
  }

  ws.onmessage = function (event) {
    console.log('Response from server: ' + event.data);
  }

  ws.onclose = function (event) {
    console.log('Connection closed.');
  }

  ws.onerror = function (event) {
    console.log('An error occurred. Sorry for that.');
  }

  WebSocket.prototype.sendMessage = function (message) {
    this.send(message);
    console.log('Message sent: ' + message);
  }

  document.getElementById('send').addEventListener('click', function (event) {
    event.preventDefault();
    var message = document.getElementById('message').value;
    ws.sendMessage(message);
  });

})();

index.html-由表格組成

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>WebSocket Client Demo</title>
</head>
<body>

  <h1>WebSocket Client</h1>

  <form>
    <label for="message">Send a message</label>
    <input id="message" name="message" type="text">
    <button id="send" name="send">Send</button>
  </form>

  <script src="client.js"></script>
</body>
</html>

您的網絡服務器不提供index.html文件。

您可以查看這篇文章 ,以了解如何提供靜態文件,或者您可以啟動另一個HTTP服務器來提供索引文件,例如使用python,這是它們在您遵循的教程的README文件中建議的方式: https://github.com/simonewebdesign/websocket-demo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM