首页 > 解决方案 > 无法使用快速服务器连接到 socket.io

问题描述

我正在尝试使用以下代码创建 WebSocket。

const express = require('express')
const app = express()
const http = require('http')
const server = new http.createServer(app)
const io = require('socket.io')(server)

const CONFIG = {
    host: 'localhost',
    port: 4444
}

io.on('connection', function (socket) {
    const sid = socket.id

    console.log('connection socket id:', sid)

    for (const msg of ['disconnect', 'disconnecting', 'error']) {
        socket.on(msg, data => {
            console.log(`* ${msg}:`, data)
        })
    }

    socket.on('join', data => {
        console.console.log("data", data)
    })

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

server.listen({
    host: CONFIG.host,
    port: CONFIG.port,
}, info => {
    console.info(`Running on`, server.address())
})

当我尝试使用它进行测试时,https://www.websocket.org/echo.html我收到了一个未定义的错误。

我已经ws://127.0.0.1:4444在位置字段中给出,但是当我尝试连接时,我在日志中收到以下错误:

ERROR: undefined

并在消息中Connection closed before receiving a handshake response

这里有什么问题我怎样才能使它工作?

标签: javascriptnode.jssocket.io

解决方案


您的服务器看起来不错,您应该自己实现客户端。

文档中的 Socket.IO 服务器和客户端示例。

服务器:

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

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
  socket.on('message', (msg) => {
    console.log('message: ' + msg);
  });
});

http.listen(3000, () => {
  console.log('listening on *:3000');
});

客户端(index.html):

<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
  $(function () {
    var socket = io();
    socket.emit('message', 'Test message.');
  });
</script>

推荐阅读