socket.io和express服务器没有从客户端接收发射

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket.io和express服务器没有从客户端接收发射相关的知识,希望对你有一定的参考价值。

控制台记录“连接到套接字”,因此它似乎是连接,但似乎没有事件被触发,即使在服务器中的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
');
});

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;
      });
    });
答案

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

似乎我没有在客户端上监听'connect',因此客户端没有调用任何内容。最重要的是,我有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;
        });
      })

    });

以上是关于socket.io和express服务器没有从客户端接收发射的主要内容,如果未能解决你的问题,请参考以下文章

一个关于vue+mysql+express的全栈项目------ 实时聊天部分socket.io

Express、Socket.io 和 Nginx 的 CORS 问题

没有 express.js 的 Socket.io 会话?

Socket.io express 不同的路由

Socket.io 客户端无法发出消息

socket.io:没有触发断开事件