Node.js WebSockets Отправить сообщение - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь договориться о том, как работают WebSockets в Node.js, но у меня возникают проблемы с отправкой сообщения.

У меня настроен сервер WebSocket следующим образом (index.js)

var ws = require("ws");
var wsserver = new ws.Server ({
   server: httpserver,
   port: 3030
});

wsserver.on (
   "connection", function connection(connection) {
      console.log("connection");
   }
);
wsserver.on (
   "open", function open(open) {
      console.log("open");
   }
);
wsserver.on (
   "message", function message(message) {
      console.log("message");
   }
);

Кажется, это работает нормально, потому что я могу установить соединение, используя

var wscon = new WebSocket("ws://192.168.20.88:3030");

, что затем дает мне вывод соединения на сервере.Если я пытаюсь использовать send, хотя, похоже, ничего не происходит и никаких сообщений об ошибках

wscon.onopen = function(open) {
  wscon.send("test message");
}

Я должен что-то упустить, но я не знаю, что

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

У меня может быть ответ на этот вопрос, но я пока не совсем уверен, я собираюсь поместить это здесь на всякий случай.

Я думаю, что проблема в том, что прослушиватель сообщений добавляется внеправильный объект (объект сервера), я попытался добавить прослушиватель сообщений к объекту подключения, переданному на сервер, и он, кажется, работает, но я не уверен на 100%, почему

wsserver.on (
   "connection", function connection(connection) {
      console.log("connection");
      connection.on (
         "message", function message(message) {
            console.log("message : " + message);
         }
      );
   }
);
0 голосов
/ 10 мая 2018

Какая зависимость работает для меня?

Я уже давно использую socketIO, и он отлично работает для / серверов API Node.JS. Есть миллионы обучающих программ онлайн для этой платформы, и я расскажу вам один из них.

Как установить?

Если вы используете NPM в качестве менеджера пакетов в Node.JS, просто запустите его с помощью следующей команды:

npm install --save socket.io

Если вы используете пряжу, вы можете установить socketIO следующим образом:

yarn add socket.io

Настройка сервера сокетов:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

// Used for serving the HTML page (if used)
app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

// Listen for new connections
io.on('connection', function(socket){
  console.log('a user connected');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

Теперь в index.html я добавляю следующий фрагмент перед:

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io();
</script>

В вашем интерфейсе вы можете запустить событие через сокет, вызвав следующую функцию / код:

<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
  $(function () {
    var socket = io();
    $('form').submit(function(){
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
  });
</script>

В нашем случае мы отправили событие, называемое сообщением чата. Таким образом, чтобы получить значение, передаваемое через сокетное соединение, мы вызываем следующий код в нашем backend / api:

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log('message: ' + msg);
  });
});

и именно так вы используете сокет с библиотекой SocketIO. Надеюсь, это помогло решить вашу проблему!

...