【问题标题】:socket.io and express server not receiving emit from clientsocket.io 和 express 服务器没有收到来自客户端的发射
【发布时间】:2018-08-12 02:27:09
【问题描述】:

控制台记录“连接到套接字”,所以它似乎正在连接,但似乎没有触发任何事件,即使在服务器中 io.on 内的“断开连接”时也是如此。

“socket.on”似乎不起作用

服务器端

var server = app.listen(app.get('port'), () => {
  console.log('%s App is running at http://localhost:%d in %s mode', chalk.green('✓'), app.get('port'), app.get('env'));
  console.log('  Press CTRL-C to stop\n');
});

var io = socket(server);

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

客户

ul.pages
  li.chat.page
    div.chatArea
      ul.messages
      input.inputMessage(placeholder='Type here...')
  li.login.page
    .form
      h3.title What's your nickname?
      input.usernameInput(type="text", maxlength="14")


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

【问题讨论】:

  • 你没有一个 id=m $('#m').val() 的元素
  • 即使我添加了input#m.inputMessage(placeholder='Type here...'),它也没有做任何事情。我在控制台中看到的唯一内容仍然是“连接到套接字”。我没有将它包含在代码中,但我也将 $('#m').val() 替换为纯字符串,以查看 jquery 是否导致问题,但控制台中仍然没有打印任何内容。跨度>

标签: express socket.io pug


【解决方案1】:

如果有人遇到同样的问题,我犯了一个简单的错误,但如果有人能准确解释发生了什么,那就太好了。

似乎我没有在客户端上监听“连接”,因此客户端中没有调用任何内容。最重要的是,我让 jquery 选择器选择表单类而不是表单元素。

只要我添加了socket.on('connect',...) socket.emit 就可以工作了,我很快就能让 jquery 语句也能正常工作。

tldr;

确保在客户端上也打开连接事件 (socket.on('connect',...))。

客户

script.
    $(function () {
      var socket = io('http://localhost:8080', {transports: ['websocket']});
      socket.on('connect', function(){
        console.log("connected on client!");
        socket.emit('chat message', "hello there");
        $('form').submit(function(){
        console.log("form submitted");
          socket.emit('chat message', $('#m').val());
          $('#m').val('');
          return false;
        });
      })

    });

【讨论】:

  • 嘿!感谢您的回答。最后。到达这里需要5个小时。祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多