javascript - 如何通过 Socket.IO 服务器端发送和捕获消息

标签 javascript node.js websocket socket.io

我不确定如何理解 socket.io 中 message 的用法。我正在尝试将消息从客户端发送到服务器,然后服务器回复客户端(基本不?)。

这是服务器代码:

var fs = require('fs');
var hskey = fs.readFileSync('ssl.key');
var hscert = fs.readFileSync('ssl.crt');

var options = {
    key: hskey,
    cert: hscert
};

var app = require('https').createServer(options);
var io = require('/usr/local/lib/node_modules/socket.io').listen(app);

app.listen(8181);

io.sockets.on('connection', function (socket) {
  socket.emit('serverMessage', 'Hello world!');
  io.sockets.emit('serverMessage', 'A user connected');

  io.sockets.on('clientMessage', function (socket) {
    socket.emit('serverMessage', 'Gotamessage bitch!');
    console.log('I received a message by ', from, ' saying ', msg);
  });


    socket.on('disconnect', function () {
    io.sockets.emit('serverMessage', 'A user disconnected');
  });
});

这是客户端代码:

<script>

        var socket;
        var firstconnect = true;

        function connect() {
          if(firstconnect) {
            socket = io.connect('https://secure.connectednodes.com:8181');

            socket.on('serverMessage', function(data){ message(data); });
            socket.on('connect', function(){ status_update("Connected to Server"); });
            socket.on('disconnect', function(){ status_update("Disconnected from Server"); });
            socket.on('reconnect', function(){ status_update("Reconnected to Server"); });
            socket.on('reconnecting', function( nextRetry ){ status_update("Reconnecting in " 
              + nextRetry + " seconds"); });
            socket.on('reconnect_failed', function(){ message("Reconnect Failed"); });

            firstconnect = false;
          }
          else {
            socket.socket.reconnect();
          }
        }

        function disconnect() {
          socket.disconnect();
        }

        function message(data) {
          document.getElementById('message').innerHTML += "<br>" + "Server says: " + data;
        }

        function status_update(txt){
          document.getElementById('status').innerHTML = txt;
        }

        function esc(msg){
          return msg.replace(/</g, '&lt;').replace(/>/g, '&gt;');
        }

        function send() {
          socket.emit('clientMessage', 'Yo server');  
        };        

     </script>

我设法使连接和断开连接正常工作,但我无法使 io.sockets.on('clientMessage' 正常工作。有什么想法吗?

最佳答案

我认为你必须使用 socket.on 而不是 io.sockets.on

服务器端

socket.on('clientMessage', function (data, from) {
   socket.emit('serverMessage', 'Got a message!');
   console.log('I received a message by ', from, ' saying ', msg);
});

客户端

function send() {
   socket.emit('clientMessage', 'Yo server', 'USER001');  
}; 

尝试一下

关于javascript - 如何通过 Socket.IO 服务器端发送和捕获消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10098564/

相关文章:

javascript - iframe 和过渡效果相乘?

javascript - 回发后如何使用ddSlick将选择设置为选项?

javascript - 替换当前 URL 的一部分

node.js - 找不到 casperjs 命令

node.js - 如何让我的 nodejs 应用程序服务于多个用户?

go - 如何向池中的所有连接发送消息

node.js - WebSocket TLS 证书设置的乐趣

javascript - 带按钮的幻灯片图像

javascript - Node |模块.js :540 throw err

php - fsockopen 连接保持打开状态