HapiJS和Socket IO不发出

时间:2019-02-23 01:42:40

标签: socket.io hapi

我正在尝试使用hapi设置socket.io。我在这里设置了准系统仓库:https://github.com/imcodingideas/socketio-hapi-example,但这是要点。在server.js上,我正在监听连接

  io.sockets.on('connection', (socket) => {
    socket.emit({ msg: 'welcome' })
  })

在客户端上我正在发送连接

socket.on('msg', data => {
  console.log(data)
  socket.emit('my other event', { my: 'data' })
})

我没有收到任何错误提示或什么都没有,所以它可以连接。

2 个答案:

答案 0 :(得分:1)

您的代码可以正常工作,与放置server.start()的位置无关。

问题是您的客户端代码。 socket.io客户端不存在事件socket.on('connection')。该事件称为connect

IO - Event: ‘connect’ Documentation

下面的代码段应该起作用。

const socket = io('http://localhost:8081');

socket.on('connect', data => {
    console.log('connected');
});

socket.on('msg', data => {
    console.log(data);
});

setTimeout(() => {
    socket.emit('another event', 'another events data')
}, 2000)

服务器:

const init = async () => {
  const io = SocketIO.listen(server.listener)

  io.sockets.on('connection', (socket) => {
    socket.emit('msg', 'welcome')

    socket.on('another event', (data) => {
      console.log(data);
    })
  })

  await server.start()
  console.log(`Server running at: ${server.info.uri}`)
}

答案 1 :(得分:-1)

在初始化套接字侦听器之前,请勿启动服务器。

'use strict'

const Hapi = require('hapi')
const SocketIO = require('socket.io')

const server = Hapi.server({
  port: 8081,
  host: 'localhost'
})

const init = async () => {
  // await server.start() // not here

  const io = SocketIO.listen(server.listener)

  io.sockets.on('connection', (socket) => {
    socket.emit('msg', 'welcome')
  })

  await server.start() // but  start it here.
  console.log(`Server running at: ${server.info.uri}`)
}

init()

专业提示

您可以使用Firecamp直观地测试套接字事件和侦听器

enter image description here