Socket.io:Node.js无法通过AWS上的方法socket.on(' message',...)接收事件消息

时间:2015-08-18 15:15:48

标签: javascript node.js socket.io

我即使使用the Socket.io official chat sample也遇到此问题。

我在AWS上设置了这个。我只能收到成功连接的'终端上的消息但不是消息:....'。即使使用Google Dev Tool,我也无法看到任何相关错误。有人可以帮忙吗?

这是客户端javascript代码:

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

然后服务器端node.js代码:

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

app.get('/', function(req, res){
  res.sendfile('index.html');
});
http.listen(8989, function(){
  console.log('listening on *:8989');
});

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

2 个答案:

答案 0 :(得分:0)

按钮点击没有表单提交,表单提交也会创建大量的页面刷新和所有内容,而且你也不需要这个练习的表单

创建一个函数sendMessage()

<script>
    var socket = io();
    function sendMessage(){
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
    }
</script>

在您的HTML删除表单中添加onclick到按钮

<body>
    <ul id="messages"></ul>
    <input id="m" autocomplete="off" /><button onclick="sendMessage()">Send</button>
</body>

答案 1 :(得分:0)

原来问题出在客户端javascript代码上。

我提到this sample code并发现在socket.io官方网站上它说在某些情况下(Express 3/4或框架)你需要使用io.connect()而不是io()。然而,在我之前的案例中,它对我有用。

以下是更改后的代码:

var socket = io.connect();
$('form').submit(function(){
  socket.emit('chat message', $('#m').val());
  $('#m').val('');
  return false;
});