Socket.io 集成节点

Socket.io integration Node

嘿,我是套接字和节点的新手,正在尝试使用 socket.io 进行聊天。

这是我的 index.js 文件:

var app = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res) {
   //route handler serve index.html file
   res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket) {
    console.log('A user has connected');
    socket.on('disconnect', function() {
        console.log("A user has disconnected");
    })
})

http.listen(3000, function() {
    console.log('listening on port 3000');
});

**这是我的index.html:**

<html>
<head>
    <title> Chat </title>
    <script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>
    <script>
        var socket = io();
    </script>
</head>
<body>
    <ul id="messages"></ul>
    <form action="">
        <input id="m" autocomplete="off"/> <button> Send </button>
    </form>
</body> 

我不断收到一个引用错误,指出 io 未定义。我尝试将套接字链接为 cdn 和我的服务器 url。

您需要在服务器端加载和初始化socket.io:

var app = require('express')();
var http = require('http').Server(app);

// add this line
var io = require('socket.io')(http);

这会加载 socket.io 模块,将其注册到您的 Web 服务器以便它可以挂接到它,然后声明并分配 io 变量。

P.S。您的客户端正在链接到 socket.io 1.0.0,此时这是一个相当旧的版本。您可能应该让 socket.io 服务器通过将客户端脚本标记更改为以下内容来处理 socket.io 客户端的服务:

<script src="/socket.io/socket.io.js"></script>

这将自动为客户端提供服务器上 socket.io 的匹配版本(因此它们将始终与同一版本同步)。这是可行的,因为 require('socket.io')(app) 所做的其中一件事是它为 /socket.io/socket.io.js.

注册了一个路由处理程序