【问题标题】:Node.js WebSockets Send MessageNode.js WebSockets 发送消息
【发布时间】:2018-05-10 12:49:39
【问题描述】:

我正在尝试了解 WebSocket 在 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");

然后给我服务器上的连接输出。如果我尝试使用发送,但似乎什么也没发生,也没有错误消息

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

我一定错过了什么,但我不知道是什么

【问题讨论】:

    标签: node.js websocket messaging


    【解决方案1】:

    我可能对此有一个答案,但我还不能完全确定,我将把它放在这里以防万一。

    我认为问题在于消息侦听器添加到了错误的对象(服务器对象),我尝试将消息侦听器添加到传递给服务器的连接对象,它似乎正在工作,但我没有100% 确定原因

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

    【讨论】:

      【解决方案2】:

      哪种依赖项适合我?

      我使用 socketIO 已经有一段时间了,它非常适合 Node.JS API 的/服务器。网上有数百万关于这个框架的教程,我会告诉你一个。

      如何安装?

      如果您在 Node.JS 中使用 NPM 作为包管理器,只需使用以下命令关闭它:

      npm install --save socket.io
      

      如果您使用的是 yarn,您可以按如下方式安装 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 中,我在 :

      之前添加以下 sn-p
      <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>
      

      在我们的例子中,我们发出了一个名为聊天消息的事件。因此,为了接收通过套接字连接发送的值,我们在后端/api 中调用以下代码:

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

      这基本上就是您如何将套接字与库 SocketIO 一起使用。希望这有助于解决您的问题!

      【讨论】:

      • 我喜欢 socket.io
      • @Trent 不用担心,伙计。我希望这能让你继续前进。 ;) 保重!
      • @KevinVugts - 想知道您在生产环境中使用 socket.io 的经验吗?
      • @kta 它在我的生产环境中运行良好。我只将它用于应用程序中的小部分,但它确实有效。你呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 2021-10-07
      相关资源
      最近更新 更多