socket.on()之外的Socket.emit()

时间:2018-07-19 08:25:29

标签: socket.io

我们是否总是必须像这样在socket.on()中使用socket.emit():

io.sockets.on('connection', function (socket) {
    console.log('User connected !');
    retrieveDictionnary((dictionnary) =>{
     socket.emit('dictionnarySend', dictionnary);
    }
}

我想在客户端创建一个函数,当我单击按钮时向服务器询问信息:

translateServer(parameter, control){
        this.socket.emit('translate', [parameter,control]);
}

但是似乎无法正常工作,服务器从未收到此消息。

谢谢!

1 个答案:

答案 0 :(得分:0)

上面使用的模式是与套接字进行交互的推荐方式(即,在触发“ connection”事件时获取socket实例,然后从该套接字实例调用emit(),等等) )。

如果我正确理解了客户端的要求,那么您想通过Web套接字将数据发送到服务器-您确定套接字已在客户端和服务器之间建立了Web套接字连接吗?

例如,如果将以下内容添加到客户端代码中,则应该在控制台中看到成功消息:

const socket = io.connect('YOUR SERVER ADDRESS');

socket.on('connect', () => {
  console.log('connected to server!');

  // [UPDATE]
  // This assumes you have a <button> element on your page. When
  // clicked, a message will be sent to the server via sockets
  document.querySelector('button').addEventListener('click', (event) => { 

      // Prevent button click reloading page
      event.preventDefault();

      // Send message to server via socket
      socket.emit('MESSAGE_ID', 'test message from client' + new Date());
  });

});

更新

这显示了原始服务器代码,并扩展了接收和打印通过套接字从客户端发送的数据所需的详细信息:

io.sockets.on('connection', function (socket) {
    console.log('User connected !');

    // Register a server handler for any messages from client on MESSAGE_ID channel
    socket.on('MESSAGE_ID', (message) => {

      // Print the message received from client in console  
      console.log('message from client', message);
    })

    retrieveDictionnary((dictionnary) =>{
         socket.emit('dictionnarySend', dictionnary);
    }
}